【发布时间】:2011-05-18 18:00:59
【问题描述】:
我正在尝试将第 3 方 dll(即我没有源代码)加载到我的应用程序中。在 windows xp 32 位系统上,它加载正常,但在 windows 7 系统上,它无法加载,引用来自 GetLastError() 的错误 #998
我使用 dll 导出查看器查看了 dll 的导入和导出符号,并观察到导入表中列出的除了 3 个 dll 之外的所有 dll 都来自这个第 3 方供应商。那些没有的是:
kernel32.dll
mingwm10.dll
msvcrt.dll
这是我用来进行导入的代码:
SetDllDirectory(L"c:\\dlls");
HMODULE tempDLL = LoadLibrary(L"mydll.dll");
DWORD err = GetLastError();
请提供有关如何进行调试的任何提示?
编辑:感谢大家的回答,这是我迄今为止发现的:
a) 应用程序工具包包并没有被证明是有用的(见下文)
b) 同事 A 可以让 dll 加载到他的 win 7 机器上,而同事 B 不能,所以这是零星的
c)以管理员身份运行并没有改变任何东西
【问题讨论】:
-
奇怪的是,我可以在 Win7 上加载 kernel32.dll 和 msvcrt.dll 而没有任何问题。您确定 LoadLibrary 在您的情况下返回 NULL 吗?
-
你的 dll 加载路径中有 mingwm10.dll 吗?
-
只是我脑海中的猜测。您是否尝试以“管理员身份”运行您的应用程序?如果没有,请尝试告诉我们结果。
-
感谢您的快速回复。答案是:
-
@Andrew 现在的问题是:您在函数
SetDllDirectory(L"c:\\dlls");中实际使用的目录。如果您使用的目录在没有管理员权限的情况下无权访问,或者它们受 UAC 限制,则可能会出现此问题。
标签: c++ dll loadlibrary