ISSUE: dll被编译为64位,使用dll的程序被编译为32位。
解决方案:使用64位的64位dll编译程序。
我有一个叫做mydll.dll
的dll。我已经能够在VS2013之外编译.cpp
文件,并且能够加载dll。一旦我尝试在VS2013和.cpp
中创建相同的LoadLibrary(mydll.dll)
文件,并将dll放在与我的.cpp
相同的文件夹中,它就找不到dll,即使我直接转到dll它仍然无法运作。
我的dll已被证明可以在VS2013之外工作,所以我不相信这是问题的根源。可能的来源是我的无知。
代码:
(Main.cpp的)
int main(void){
HINSTANCE dllHandle;
dllHandle = LoadLibrary("mydll.dll");
if (!dllHandle){
printf("dll no load\n");
system("pause");
return 1;
}
else{
printf("dll load!\n");
}
}
答案 0 :(得分:4)
如果您的dll位于Windows正在使用的搜索路径中,请确保您没有混用32位和64位。 Windows不会将32位dll加载到64位应用程序中,也不会将64位dll加载到32位应用程序中。
注意:请参阅@Nard的答案,了解Windows如何搜索dll:https://stackoverflow.com/a/26435819/487892)
答案 1 :(得分:3)
由于DLL在程序运行时加载,您应该确保提供给LoadLibrary的DLL路径是相对于可执行文件,还是提供绝对路径。当您不提供绝对路径时,请参阅MSDN文档,了解DLL的位置:
Dynamic-Link Library Search Order
编译器在这种情况下不会处理DLL的加载,因此cpp文件不需要找到文件,而是可执行文件需要找到文件。 / p>