Экспорт функций из ActiveX DLL

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Экспорт функций из ActiveX DLL

Сообщение keks-n » 13.01.2006 (Пт) 18:28

Начну я издалека...
Сегодня меня что-то толкнуло запустить VB'шный LINK.EXE из коммандной строки...
Он мне написал:
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

а дальше - список параметров.
Мне это что-то напомнило... Через минуту я залез в папку с MASM'ом и запустил тамошний LINK.EXE
Он мене сказал:
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

Похоже, да?
Вспомнив, как экспортировать функции из DLL'ки в masm'e я решил проделать тоже самое в VB, несмотря на то, что способ делания DLL, прямо экспортирующих свои функции изобретён (там правдо мне не всё нравится, во первых EXE делает, путём шаманских плясок, из себя DLL, во вторых там нельзя расшарить секции данных).
Сначала подменил линкер и посмотрел, что ВБ ему передаёт... Ууууу, скока много параметров... Нее, так дело не пойдёт.
Наскоро слепил "псевдо-линкер", который позволяет модифицировать руками параметры коммандной строки, небольшой проект, с модулем и процедурой, и DEF файл с командой экспортировать процедуру с этим именем. Похимичил немного, и ЗАРАБОТАЛО!



Итак, собственно как экспортировать (пример):
1) Качните псевдо-линкер, который я выкладываю.
2) Переименуйте LINK.EXE в LINK1.EXE.
3) Скопируйте LINK.EXE из архива в VB'шную папку (VB98).
4)Создайте новый проект ActiveX DLL и обзовите его test.
5) Добавьте модули не прибивая класс(а то VB раскричится, что нету экспортируемых объектов)
6)В модуле напишите... Ну например:
Код: Выделить всё
Sub Test
Msgbox "Ку-ку!",0,""
End Sub

7) Создайте текстовый файл и напишите там:
Код: Выделить всё
LIBRARY test
EXPORTS Test

8) Компилим.
9) Вылез скачанный псевдо-линкер :) Жмём на кнопку "Добавить таблицу экспорта", и выберите свежесозданный файл.
10) Жмём "Линковать"

Всё! Теперь, при вызове процедуры Test из нашей библы радостно вылезет Msgbox :D


З. Ы. У меня при написании всёго этого было предчувствие, что изобретаю велосипед.
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.01.2006 (Пт) 18:32

Последний раз редактировалось GSerg 13.01.2006 (Пт) 18:40, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.01.2006 (Пт) 18:37

Да, знаю я про этот метод. Просто решил предложить альтернативу. Как бы то ни было весчь была гениальная(Это я про переделывающий себя EXE'шник)!
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.01.2006 (Пт) 18:43

Это то же самый метод.


И ещё две ссылки - почитай про баги получившегося решения...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.01.2006 (Пт) 18:50

GSerg
У тебя была ручная генерация секции экспорта, а тут - чуть-чуть иначе - скормил линкеру ключ, и радуйся :) К тому-же этот псевдо-линкер, поможет скормить еще чего-нибудь, например заставить расшарить секцию :) . Я к тому же про изобретение велосипеда говорил :)
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.01.2006 (Пт) 18:56

keks-n
Почитай вступительный текст к моему солюшену - там описывается именно то, что предлагаешь ты (за авторством одного чела с psc.com), и объясняется, почему оно мне не понравилось :)

А потом-таки перечитай про все баги, которые ты получаешь с такой dll...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.01.2006 (Пт) 18:59

... Гм... действительно. А ежели сначала класс оттудова проинициализить какой? Виртуальная машина вроде должна стартануть?
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.01.2006 (Пт) 19:04

А по поводу надоедливого окошка... Так это поправимо - мона ведь сделать так, чтобы оно вылезало, тока если Alt зажат :)
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.01.2006 (Пт) 19:11

Это придётся прописывать в документации, а её никто никогда не читает - и вообще, до решения фундаментальных проблем типа инициализации VM Alt особого смысла не имеет :)
А решать эти проблемы мне, например, не хоцца... dll я и на C++ напишу...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 13.01.2006 (Пт) 19:18

GSerg
Ну ты (и еще несколько человек) напишешь легко. Но не всем это дано, я, например C не знаю :(
А по поводу Альта, можно жирным шрифтом при первом запуске(не требующем нажатия) написать ЖИРНЫМ шрифтом, что для запуска его надо зажать.
Кстати, не VM_Alt, a VK_Alt, по моему :roll:
Изображение


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList