【发布时间】:2014-10-18 02:33:25
【问题描述】:
问题: dll 被编译为 64 位,使用 dll 的程序被编译为 32 位。
解决方法:在64位中使用64位dll编译程序。
我有一个名为mydll.dll 的dll。我已经能够在 VS2013 之外编译 .cpp 文件并且能够加载 dll。一旦我尝试在 VS2013 和 LoadLibrary(mydll.dll) 中使用与我的.cpp 相同的文件夹中的 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");
}
}
【问题讨论】:
-
您不应将 dll 与 cpp 文件放在同一文件夹中。它应该在 exe 文件所在的文件夹中。默认情况下,这些在 Visual Studio 中不会相同。还要确保您没有混合使用 32 位和 64 位。我的意思是你不能在 64 位应用程序中加载 32 位 dll 或在 32 位应用程序中加载 64 位 dll。
-
@drescherjm 你说的很对!我用 Cuda 的 64 位 NVCC 编译了我的 Dll。我所要做的就是将 VS2013 中的构建设置更改为 x64,它就可以工作了。如果您发布它,我会将其设置为答案。
标签: c++ dll visual-studio-2013 loadlibrary