2015-09-04 32 views
-1

我正在制作一个使用msvC++的win32控制台应用程序,它将使用一个非常简单的dll。我把我的.lib和我的dll头文件(我的dll只有一个头文件)放到我的控制台应用程序文件夹中。为什么我必须在这里放置我的动态链接库?

当我运行它时,我没有得到任何编译或链接错误,但是当应用程序实际打开时,它说它无法找到dll。当我将.dll文件放入控制台应用程序的文件夹并运行时,它实际上可以工作。我想知道为什么会发生这种情况??????

+1

嗯,当然。 MSVC++解决方案可让您创建多个项目。可执行文件都在同一个地方,默认情况下,该解决方案的Debug目录。如果你不使用该功能,那么你必须自己复制文件。使用该功能。 –

回答

0

看看这个链接:

Dynamic-Link Library Search Order

Windows有一个DLL搜索顺序。您可以通过上述链接中指定的功能对其进行更改。

您的导入库用于定义有关您的DLL等功能的信息。您可以使用LoadLibrary("myDLL.dll")函数来加载无标题的DLL。

在这种情况下,您必须使用GetProcAddress(module, "function_name")函数来获取DLL中的函数地址。

GetProcAddress function

,这里是哪里是GetProcAddress()一些解决方案的链接:

Calling functions in a DLL from C++

+1

问题是DLL搜索顺序。剩下的答案与liuz问的问题无关。 'LoadLibrary()'/'GetProcAddress()'不是这个问题的答案,尽管如果你想从一个DLL搜索顺序中没有包含的位置加载DLL的话,它是一个替代解决方案(尽管你可以使用' SetDllDirectory()'或'AddDllDirectory()'来解决这个问题)。 –

相关问题