Проблемы с использованием динамически связанных библиотек (wxWidgets) из DLL - PullRequest
0 голосов
/ 24 апреля 2009

Мы создали плагин; это DLL (динамическое связывание во время выполнения), которое использует стороннюю библиотеку (wxWidgets) и также динамически связывается с ней. Программное обеспечение хоста, похоже, сканирует наш плагин, но экспортированные функции не вызываются. Мы проверили все зависимости с DependencyWalker.

Мы видим в отладчике, что плагин загружен, но DllMain не вызывается, а плагин выгружается.

Мы попытались загрузить наш плагин из простого тестового приложения, используя LoadLibrary и GetProcAddress, которые распознавали и вызывали экспортированные функции.

Статически работающие ссылки wxWidgets работали нормально.

Кто-нибудь имеет представление, почему не вызывается экспортируемая функция, соответственно DllMain, или может указать на инструмент, способный контролировать весь процесс загрузки DLL?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2009

Возможно, программное обеспечение хоста делает несколько забавных вещей при загрузке плагина и не любит wxWindows.

В любом случае, попробуйте использовать ProcessExplorer из набора SysInternals , чтобы проверить, что делает процесс.

0 голосов
/ 24 апреля 2009

Если wxWidgets уже загружен в адресное пространство процесса до загрузки вашего плагина (хост-приложение может сделать это, или может быть другой плагин, связывающий wxWidgets, который загружен раньше вашего), то может быть вероятность это другая версия, в которой отсутствуют некоторые точки входа, которые нужны вашему плагину. Запуск хост-приложения под DependencyWalker или WinDbg должен показать вам, какая библиотека wxWidgets загружена, и вы можете попробовать загрузить свой плагин из тестового приложения, используя точно такую ​​же библиотеку wxWidgets. Это должно показать, есть ли отсутствующие зависимости.

...