爲什麼在編譯時鏈接庫加載失敗?我不在乎釋放圖書館,但它不會工作。動態庫在執行時鏈接
#include <windows.h>
int main()
{
LoadLibrary("winmm.lib");
timeGetTime();
}
爲什麼在編譯時鏈接庫加載失敗?我不在乎釋放圖書館,但它不會工作。動態庫在執行時鏈接
#include <windows.h>
int main()
{
LoadLibrary("winmm.lib");
timeGetTime();
}
.lib
不是動態鏈接庫(DLL),並且不能在運行時加載。您需要加載.dll
,或在鏈接時鏈接.lib
(此時您不使用LoadLibrary)。
我試過'LoadLibrary(「winmm.dll」);'但它不會工作。 – 2010-05-27 05:44:52
從上面的註釋可以看出,問題在於timeGetTime()在編譯時需要winmm模塊,這意味着您必須鏈接到winmm.lib。如果要使用運行時鏈接,則不能直接通過其名稱調用該函數;你必須從DLL中取出它的函數指針。
如果您真的想在運行時加載DLL,則必須使用GetProcAddress。在MSDN page上找到了一套正確使用LoadLibrary的示例代碼。
試試看看這個代碼。它應該解決你的問題。
#include <windows.h>
#pragma comment(lib, "winmm.lib")
int main()
{
DWORD time = timeGetTime();
}
雖然它不是「便攜式」,但我喜歡將鏈接信息和編譯信息緊密結合在一起的想法。 – xtofl 2010-05-27 06:49:40
你要加載使用LoadLibrary功能,其目的是加載動態鏈接庫一的.lib文件(鏈接庫信息) - 這是完全錯誤的。 .lib文件在鏈接時鏈接到可執行文件中,而.dll文件在運行時加載,可以通過使用LoadLibrary的顯式加載或通過向鏈接器提供引用.dll文件的.lib文件。
「不起作用」不是對問題非常有幫助的描述。請解釋*什麼*沒有工作,你嘗試過什麼,以及顯示哪些錯誤消息(如果有的話)。 – greyfade 2010-05-27 05:54:36
我得到一個錯誤,說「錯誤LNK2019:無法解析的外部符號__imp__timeGetTime @ 0在函數_main中引用」 – 2010-05-27 06:08:05
錯誤消息不會告訴你LoadLibrary是造成這個問題,因此你的問題是不適合atm。 – YeenFei 2010-05-27 07:02:44