Сегодня меня что-то толкнуло запустить 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
Компилим.
9) Вылез скачанный псевдо-линкер Жмём на кнопку "Добавить таблицу экспорта", и выберите свежесозданный файл.
10) Жмём "Линковать"
Всё! Теперь, при вызове процедуры Test из нашей библы радостно вылезет Msgbox
З. Ы. У меня при написании всёго этого было предчувствие, что изобретаю велосипед.