Динамическая загрузка DLL внутри другой DLL - PullRequest
2 голосов
/ 24 ноября 2010

Мне нужно загрузить dll в другой dll (Visual C ++ и то и другое), чтобы я мог использовать классы, встроенные в первый, во второй. У меня есть код обоих, так как я создал обе библиотеки DLL, но я никогда не загружал библиотеку динамически, поэтому я не уверен, как это сделать ...

Кроме того, я хочу сделать эту мультиплатформенную, я уже скомпилировал как .dll и .so, так что это был бы отличный независимый от платформы метод сделать это ... в противном случае, я могу использовать макросы для включения окон или специфичный для Linux код.

С наилучшими пожеланиями и большое спасибо

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Функции для динамической загрузки библиотеки: LoadLibrary (Windows), dlopen (Linux). Чтобы получить символы: GetProcAddress (Windows), dlsym (LInux). Закройте открытую библиотеку: FreeLibrary (Windows), dlclose (Linux). Есть статья о том, как динамически загружать классы в Windows: http://www.codeproject.com/KB/DLL/classesexportedusingLL.aspx и Linux: http://www.linuxjournal.com/article/3687?page=0,0. И есть код для динамической загрузки библиотек в Windows и Linux: http://www.sview.ru/sources/libexample/loadLibrary.h. Я надеюсь это может вам помочь.

Существует дополнительная информация о классах загрузки динамически в Windows и Linux:

http://www.codeguru.com/cpp/w-p/win32/article.php/c1443 (Windows). http://www.faqs.org/docs/Linux-mini/C++-dlopen.html#loadingclasses (Linux).

0 голосов
/ 24 ноября 2010

Как правило, просто скомпилируйте и свяжите DLL самого низкого уровня.Это создаст саму DLL и файл .LIB.Скомпилируйте и свяжите следующую DLL по цепочке, связавшись с этим файлом .LIB.Продолжайте цепочку, пока не дойдете до .EXE, с которым (как правило) больше ничего не связывает.

...