typedef TdmDoc* (__import DocumentClass)(HWND CApp,char* server,char* user,char* pass,char* role);
...
DocumentClass *DocumentList; //
....
HINSTANCE dllInstance = LoadLibrary("dmregdoc.dll");
DocumentList = (DocumentClass*)GetProcAddress(dllInstance,"_CreateDmModule");
...
dmDoc = DocumentList(this,"server:base","USER","PASS","");
//Здесь вызывается функция создающая класс доступа к базе данных
dmDoc->actConnect->Execute();
//Здесь функции класса.
Как из динамически подгружаемой Dll вытащить класс
P.S.
Надеюсь с DLL у Вас больше опыта нежели с Indy.
Что значит "вытащить"?
Цитата:
Originally posted by Romik
Как из динамически подгружаемой DLL вытащить класс, из статически подгружаемой библиотеки нет проблем (в книгах это подробно описано). В DEF файле методы моего классы выглядят как TMyClass::SayHello(void *), а в моём классе метод объявлян как void __fastcall SayHello(HWND h). Я так понимаю что нужно создать указатель на этот метод (и на все методы моего класса) так же как и на любую другую функцию в DLL. Но как правильно это сделать я не знаю. Пробывал так SayHello=((void)(__fastcall*)(void*)) Ясное дело - это не работает. Буду благодарен всем кто откликнется.
P.S.
Надеюсь с DLL у Вас больше опыта нежели с Indy.
Как из динамически подгружаемой DLL вытащить класс, из статически подгружаемой библиотеки нет проблем (в книгах это подробно описано). В DEF файле методы моего классы выглядят как TMyClass::SayHello(void *), а в моём классе метод объявлян как void __fastcall SayHello(HWND h). Я так понимаю что нужно создать указатель на этот метод (и на все методы моего класса) так же как и на любую другую функцию в DLL. Но как правильно это сделать я не знаю. Пробывал так SayHello=((void)(__fastcall*)(void*)) Ясное дело - это не работает. Буду благодарен всем кто откликнется.
P.S.
Надеюсь с DLL у Вас больше опыта нежели с Indy.
Помоему каждые полгода на форуме создается тема - как вытащить ... из длл. Может объединить их в одну?
Для того чтобы экспортировать класс из длл есть несколько способов. Первый - это создать базовый абстрактный класс и объявить нужные тебе функции как виртуальные - остальные классы наследовать от него. Фактически это вариант технологии COM.
Второй вариант - это объявление фукций класса, который экспортируется, виртуальными без базовых классов. И третий - самый громоздкий - использование списка экспортируемых функций.
Выглядит так:
Код: