Показать полную графическую версию : Что надо написать, чтобы DLL на C++6.0 "читалась" VB6.0?
Мне ужасно надо оптимизировать математику в VB, для этого нужна библиотека, которая "прочтётся" Бейсиком, то есть он найдёт точку входа в DLL. Так вот, приведите, пожалуйста, кто может, пример кода, который после компиляции из C++, даст подключаемую библиотеку.
См.файл win32api.txt в каталоге установки Vb\Winapi и используй ApitextViewer. Там многие объявления есть. Правда, есть некоторые ошибки и зависимость от версий Dll. При использовании более старых версий какие-то точки входа могут отсутстивовать. Если нужны специфичные DLL, нужна документация по поводу их объявления
создаешь dll wizard(ом) и урезаешь до такого вида:
#include stdafx.h
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
int __stdcall FuncTion(int x, int Y)
{
return x*y;
}
потом создаешь текстовый файл с расширением *.def следующего содержания:
LIBRARY "MyDll.DLL"
EXPORTS
FuncTion @10
собираешь и кладешь рядом с проектом :)
С примером сложновато, но советую написать DLL-ку на С, по типу той, что wizard в visual c++ делает. Нежелательно писать на С++, т.к. вместо функции MyFunc при искажении имен компилятором С++ получится что-то вроде MyFunc$afqqq и т.п. Такую функцию VB вряд ли найдет в DLL по имени MyFunc
ну вот, сплошная дискуссия гостей, не знаешь к кому и обращаться :)
Так вот, Guest 195.239.140.* :), в примере Guest 195.16.57.* как раз и указано
потом создаешь текстовый файл с расширением *.def следующего содержания:
LIBRARY * * *"MyDll.DLL"
EXPORTS
* * * FuncTion * *@10
собираешь и кладешь рядом с проектом
Это как раз и относится к проблеме искажения имен: чтобы его обойти *и подключают при линковке специальный DEF-файл, перечисляющий имена, которые не должны измениться.
bde (вот еще немножко документации (http://citforum.isurgut.ru/book/cook/dll0.shtml) (к help-у :) по этому поводу)
ОК, спасибо..
:) А я эту проблему по-другому "решил", хотя ошибки хоть и возникают, но их легко обойти. В VB мона написать так:
Declare sub AAA lib "MyLib.dll" alias "#1"()
Это значит, что бэйзик будет подразумевать под процедурой ААА первую экспортируемую из DLL-ки. Ну а узнать как процедуры "лежат" в библиотеке не сложно.:gigi:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.