Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Что надо написать, чтобы DLL на C++6.0 "читалась"  VB6.0? (http://forum.oszone.net/showthread.php?t=29583)

bde 08-12-2003 20:18 204750

Мне ужасно надо оптимизировать математику в VB, для этого нужна библиотека, которая "прочтётся" Бейсиком, то есть он найдёт точку входа в DLL. Так вот, приведите, пожалуйста, кто может, пример кода, который после компиляции из C++, даст подключаемую библиотеку.

Guest 16-01-2004 16:34 204751

См.файл win32api.txt в каталоге установки Vb\Winapi и используй ApitextViewer. Там многие объявления есть. Правда, есть некоторые ошибки и зависимость от версий Dll. При использовании более старых версий какие-то точки входа могут отсутстивовать. Если нужны специфичные DLL, нужна документация по поводу их объявления

Guest 25-06-2004 14:01 204752

создаешь 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

собираешь и кладешь рядом с проектом :)

Guest 18-07-2004 05:33 204753

С примером сложновато, но советую написать DLL-ку на С, по типу той, что wizard в visual c++ делает. Нежелательно писать на С++, т.к. вместо функции MyFunc при искажении имен компилятором С++ получится что-то вроде MyFunc$afqqq и т.п. Такую функцию VB вряд ли найдет в DLL по имени MyFunc

mar 18-07-2004 14:15 204754

ну вот, сплошная дискуссия гостей, не знаешь к кому и обращаться :)
Так вот, Guest 195.239.140.* :), в примере Guest 195.16.57.* как раз и указано
Цитата:

потом создаешь текстовый файл с расширением *.def следующего содержания:

LIBRARY * * *"MyDll.DLL"
EXPORTS
* * * FuncTion * *@10

собираешь и кладешь рядом с проектом
Это как раз и относится к проблеме искажения имен: чтобы его обойти *и подключают при линковке специальный DEF-файл, перечисляющий имена, которые не должны измениться.

bde (вот еще немножко документации (к help-у :) по этому поводу)

bde 19-07-2004 10:07 204755

ОК, спасибо..

:) А я эту проблему по-другому "решил", хотя ошибки хоть и возникают, но их легко обойти. В VB мона написать так:

Declare sub AAA lib "MyLib.dll" alias "#1"()

Это значит, что бэйзик будет подразумевать под процедурой ААА первую экспортируемую из DLL-ки. Ну а узнать как процедуры "лежат" в библиотеке не сложно.:gigi:


Время: 10:04.

Время: 10:04.
© OSzone.net 2001-