Хочу подключать и использовать dll в своей программе ( компилированной GCC (MinGW), dll создавал этим же компилятором (-shared) ).
Проччитал про функции MinGW для этого дела ( dlopen,dlsym,dlclose ), но чтобы их использовать нужно подключить dlfcn.h, которого я не нашел в установленной MinGW ( на платформе Windows ).
Тебе нужно именно динамически dll-ку грузить, или статически подойдёт?
Если статически подойдёт, то просто добавь в строку сборки -LПуть_к_библиотеке_импорта -lимя_dll_ки_без_расширения.
Re[2]: MinGW работа с dll (Windows)
От:
Аноним
Дата:
27.11.06 08:09
Оценка:
Здравствуйте, Tonal-, Вы писали:
T>Тебе нужно именно динамически dll-ку грузить, или статически подойдёт? T>Если статически подойдёт, то просто добавь в строку сборки -LПуть_к_библиотеке_импорта -lимя_dll_ки_без_расширения.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Tonal-, Вы писали:
T>>Тебе нужно именно динамически dll-ку грузить, или статически подойдёт? T>>Если статически подойдёт, то просто добавь в строку сборки -LПуть_к_библиотеке_импорта -lимя_dll_ки_без_расширения.
А>Интересует динамическое подключение библиотеки.
Используй LoadLibrary/GetProcAddress. Если хочется портабельности, то можно написать как-то так:
#ifdef WINDOWS
#define dlopen LoadLibrary
#define dlsym GetProcAddress
#endif
т.к. сигнатуры LoadLibrary/GetProcAddress и dlopen/dlsym похожи
Re[4]: MinGW работа с dll (Windows)
От:
Аноним
Дата:
27.11.06 09:53
Оценка:
Здравствуйте, Сергей, Вы писали:
С>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Tonal-, Вы писали:
T>>>Тебе нужно именно динамически dll-ку грузить, или статически подойдёт? T>>>Если статически подойдёт, то просто добавь в строку сборки -LПуть_к_библиотеке_импорта -lимя_dll_ки_без_расширения.
А>>Интересует динамическое подключение библиотеки.
С>Используй LoadLibrary/GetProcAddress. Если хочется портабельности, то можно написать как-то так: С>
С>#ifdef WINDOWS
С>#define dlopen LoadLibrary
С>#define dlsym GetProcAddress
С>#endif
С>
С>т.к. сигнатуры LoadLibrary/GetProcAddress и dlopen/dlsym похожи
Попробовал использовать WinAPI. Библиотеку загружает нормально. а вот функцию не находит.
GetProcAddress( handle, "test" ) возвращает NULL.
Компиляция библиотеки
g++ test.cpp -shared -o test.dll
On Mon, 27 Nov 2006 15:53:18 +0600, Аноним <0@users.rsdn.ru> wrote:
> extern "C" EXPORT void hello(void) { > printf ("Hello\n"); > }
вроде так принято писать.
читать, что такое декорация (или декорирование) имён в c++. Думаю, по
этому поводу написано уже много.
ну и для интереса можно посмотреть dumpbin /exports your.dll в обоих
вариантах
Posted via RSDN NNTP Server 2.0
Re[6]: MinGW работа с dll (Windows)
От:
Аноним
Дата:
27.11.06 10:40
Оценка:
Здравствуйте, green.nsk, Вы писали:
GN>On Mon, 27 Nov 2006 15:53:18 +0600, Аноним <0@users.rsdn.ru> wrote:
>> extern "C" EXPORT void hello(void) { >> printf ("Hello\n"); >> } GN>вроде так принято писать. GN>читать, что такое декорация (или декорирование) имён в c++. Думаю, по GN>этому поводу написано уже много.
GN>ну и для интереса можно посмотреть dumpbin /exports your.dll в обоих GN>вариантах
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, green.nsk, Вы писали:
GN>>On Mon, 27 Nov 2006 15:53:18 +0600, Аноним <0@users.rsdn.ru> wrote:
>>> extern "C" EXPORT void hello(void) { >>> printf ("Hello\n"); >>> } GN>>вроде так принято писать. GN>>читать, что такое декорация (или декорирование) имён в c++. Думаю, по GN>>этому поводу написано уже много.
GN>>ну и для интереса можно посмотреть dumpbin /exports your.dll в обоих GN>>вариантах
А>Спасибо, получилось!!!
А>Скажите, а как экспортировать классы?
Это будет компиляторозависимо (т.е. эту dll можно будет использовать только с программами написанными тем же компилятором). Посмотри как это сделано для COM — 4 функции — можно упростив повторить этот подход (интерфейсы + С-шный интерфейс экспортируемых из dll функций), сделав его переносимым. В своей практике только так и делаю.