0

我们创建了一个插件;它是一个 DLL(运行时动态链接),它使用第 3 方库(wxWidgets)并动态链接到该库。主机软件似乎扫描了我们的插件,但没有调用导出的函数。我们使用 DependencyWalker 检查了所有依赖项。

我们在调试器中看到插件被加载了,但是 DllMain 没有被调用,插件被卸载了。

我们尝试使用 LoadLibrary 和 GetProcAddress 从一个简单的测试应用程序加载我们的插件,它们识别并调用导出的函数。

不过,静态链接 wxWidgets 效果很好。

有谁知道为什么不调用导出的函数,分别是 DllMain,或者可以指出一个能够监视整个 DLL 加载过程的工具?

4

2 回答 2

0

如果在您的插件加载之前 wxWidgets 已经加载到进程地址空间中(主机应用程序可以这样做,或者可能有另一个插件链接到 wxWidgets 在您之前加载),那么它可能是另一个版本,缺少您的插件需要的一些入口点。在 DependencyWalker 或 WinDbg 下运行主机应用程序应该会显示加载了哪个 wxWidgets DLL,并且您可以尝试使用完全相同的 wxWidgets DLL 从测试应用程序加载插件。这应该揭示是否缺少依赖项。

于 2009-04-24T15:16:41.683 回答
0

也许主机软件在加载插件时做了一些时髦的事情并且不喜欢 wxWindows。

无论如何,尝试使用SysInternals套件中的 ProcessExplorer 来检查进程在做什么。

于 2009-04-24T15:16:59.280 回答