为什么在编译时链接库加载失败?我不在乎释放图书馆,但它不会工作。动态库在执行时链接
#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