很难在谷歌上搜索关于C的主题,因为我一直在找到与C#或C++相关但不是C的结果,所以也许有人可以给我一个快速,直接的答案。如何在C中使用DLL中的函数而无需使用LIB文件?我知道所有的函数原型和他们的名字。在没有lib的C中使用DLL
在此先感谢!
很难在谷歌上搜索关于C的主题,因为我一直在找到与C#或C++相关但不是C的结果,所以也许有人可以给我一个快速,直接的答案。如何在C中使用DLL中的函数而无需使用LIB文件?我知道所有的函数原型和他们的名字。在没有lib的C中使用DLL
在此先感谢!
是的,你可以。您应该使用GetProcAddress功能,可以直接调用该函数的DLL,而不涉及LIB
过程明确地链接到一个DLL调用GetProcAddress获得 在DLL导出函数的地址。您使用返回的 函数指针来调用DLL函数。
为了从上述链接引用实施例:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
这就是我要做的事情。当这个项目结束时,我会告诉你我的经历。我试图远程控制旧电脑中运行的旧版Winradio 3000系列卡。我的父亲希望能够在任何地方使用它,并且似乎认为远程控制很容易实现。好吧,我现在已经有音乐从一台电脑流到另一台电脑了,所以这里有一个开始,现在我只需要用winradio附带的DLL来实现控件,我父亲的魔法遥控器就会完成。 – 2012-07-28 07:10:51
哦,然后我需要制作一个用户界面,我想...... – 2012-07-28 07:11:33
是的,这工作得很好!没有什么真的。 Winradio API的文档有点混乱(显然,他们的世界中的DWORD在我的世界中没有签名)。除此之外,这很容易。非常感谢! – 2012-07-28 23:04:35
可以使用的LoadLibrary()和如在由DarkXphenomenon答案描述GetProcAddress的()。或者,另一种方法是通过创建一个.def文件然后通过LIB命令运行该文件来生成一个导入库来为DLL创建自己的导入库。这里的更多细节:
我觉得你老兄! C越来越倾向于背景.. – displayname 2014-02-06 13:54:42