VS2013 - LoadLibrary找不到dll

时间:2014-10-18 02:33:25

标签: c++ dll visual-studio-2013 loadlibrary

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");
    }
}

2 个答案:

答案 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>