我正在製作一個使用msvC++的win32控制檯應用程序,它將使用一個非常簡單的dll。我把我的.lib和我的dll頭文件(我的dll只有一個頭文件)放到我的控制檯應用程序文件夾中。爲什麼我必須在這裏放置我的動態鏈接庫?
當我運行它時,我沒有得到任何編譯或鏈接錯誤,但是當應用程序實際打開時,它說它無法找到dll。當我將.dll文件放入控制檯應用程序的文件夾並運行時,它實際上可以工作。我想知道爲什麼會發生這種情況??????
我正在製作一個使用msvC++的win32控制檯應用程序,它將使用一個非常簡單的dll。我把我的.lib和我的dll頭文件(我的dll只有一個頭文件)放到我的控制檯應用程序文件夾中。爲什麼我必須在這裏放置我的動態鏈接庫?
當我運行它時,我沒有得到任何編譯或鏈接錯誤,但是當應用程序實際打開時,它說它無法找到dll。當我將.dll文件放入控制檯應用程序的文件夾並運行時,它實際上可以工作。我想知道爲什麼會發生這種情況??????
看看這個鏈接:
Dynamic-Link Library Search Order
Windows有一個DLL搜索順序。您可以通過上述鏈接中指定的功能對其進行更改。
您的導入庫用於定義有關您的DLL等功能的信息。您可以使用LoadLibrary("myDLL.dll")
函數來加載無標題的DLL。
在這種情況下,您必須使用GetProcAddress(module, "function_name")
函數來獲取DLL中的函數地址。
,這裏是哪裏是GetProcAddress()
一些解決方案的鏈接:
問題是DLL搜索順序。剩下的答案與liuz問的問題無關。 'LoadLibrary()'/'GetProcAddress()'不是這個問題的答案,儘管如果你想從一個DLL搜索順序中沒有包含的位置加載DLL的話,它是一個替代解決方案(儘管你可以使用' SetDllDirectory()'或'AddDllDirectory()'來解決這個問題)。 –
嗯,當然。 MSVC++解決方案可讓您創建多個項目。可執行文件都在同一個地方,默認情況下,該解決方案的Debug目錄。如果你不使用該功能,那麼你必須自己複製文件。使用該功能。 –