VS2013 - LoadLibrary cannot find dll

VS2013 - LoadLibrary cannot find dll

本文关键字:find dll cannot LoadLibrary VS2013      更新时间:2023-10-16

ISSUE: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 loadn");
        system("pause");
        return 1;
    }
    else{
        printf("dll load!n");
    }
}

如果你的dll在windows使用的搜索路径中,请确保你没有混合32位和64位。Windows不会将32位dll加载到64位应用程序中,也不会将64位dll加载至32位应用程序。

注意:关于windows如何搜索dll,请参阅@Nard的答案:https://stackoverflow.com/a/26435819/487892)

由于DLL是在程序运行时加载的,因此您应该确保提供给LoadLibrary的DLL路径相对于可执行文件,或者提供一个绝对路径。请参阅MSDN文档,了解在不提供绝对路径时如何定位DLL:

动态链接库搜索顺序

在这种情况下,编译器不会处理DLL的加载,因此cpp文件不需要定位文件,而是可执行文件需要定位文件。