2015-09-04 65 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()'來解決這個問題)。 –

相關問題