VB и моя DLL'ка
1)VB в упор не видит мою DLL'ку(Run-time error 48:File <имя моей DLL'ки> not found).Сначала она лежала на смонтированном Виндой диске B:.Я подумал,что это какой-то глюк и файлы с виртуальных дисков и без имени(только с расширением) VB не открывает.Я её переместил на D:,но он опять её не увидел(я подумал,это из-за того,что в имени папки,где лежала DLL'ка,были пробелы).Потом я его переместил в %WinDir%,но и там он её не увидел!!!
В первом случае я писал
Код:
Private Declare Function WriteData Lib "B:\Bin\Current\.dll" Alias "_WriteData@0"(ByVal lpPStr0 as String,ByVal lpPStr1 as String,ByVal lpPStr2 as String) As Long
потом путь исправил на D:\@pixo $oft\Programs\Tools\Development\MAsm32\Bin\<какоетотамимялатинскимибуквамибезпробелов>.dll(диск B: у меня смонтирован на D:\@pixo $oft\Programs\Tools\Development\MAsm32),но и там он её не увидел.В третьем случае пути были разные:и Test,и Test.dll,и C:\Windows\Test.dll,но он её не увидел опять.В чём дело?
2)(не совсем в тему)Почему имя моей процедуры становится таким,прям как в Ц(вместо WriteData _WriteData@0,хотя у неё 3 аргумента(правда,они не заданы явно директивой Arg)).Читал я,что это носит название function name mangling'а(кстати,как это правильно перевести,а то я док перевожу и перевёл это как "изменение имён функций"?).Как это исправить?
Компиляция с помощью ML/Link32
В декларации на С/C++ должно быть _pascal и "С" (способ передачи параметров pascal).
extern "C" void _pascal Function(char *param1, char *param2, char *param3);
Если нужно, чтобы Function не представлялась в виде _Function@12
или _Function@0, то в проекте DLL должен быть файл с расширением .DEF, в котором имя функции указывается явно:
LIBRARY LIBR.DLL
EXPORTS
Function
Цитата:
Написал я свою DLL'ку на Асме...
,так что я не думаю,что здесь можно чё-то не понять.На крайний случай в конце написано,чем это компилировалось
А нельзя ли без .def?А если нельзя,то как с ним делать?
Я,кажется,понял тебя.Ты имел ввиду "язык" в заголовке процедуры,т.е. WriteData Proc <язык> Export.Я исправил на C и всё заработало.И почему DLL'ка не подключается,я тоже понял(почти)-потому что проект не сохранён(вот идиотство-пока не сохранишь проект,твои DLL'ки не видны.А стандартные Виндовские всегда работают:mad:)!!!Когда я его сохранил,всё заработало(а почему не работало до сохранения?)