在C语言中使用DLL而不是lib文件

10

如果没有相应的LIB文件,我该如何在C语言中使用DLL中的函数呢?我已经知道所有函数原型和它们的名称。

2个回答

12

是的,你可以这样做。你应该使用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);
   }
}

2
这是我要做的事情。等这个项目结束后,我会跟你分享我的经验。我正在试图远程控制一张旧的遗留Winradio 3000系列卡在一台老电脑上运行。我父亲想要能够在任何地方使用它,并且似乎认为远程控制会很容易。好吧,我现在正在从一台计算机流媒体播放音乐到另一台计算机,所以有一个开端,现在我只需要使用winradio提供的DLL实现控制,我父亲神奇的遥控器就完成了。 - Void Star
是的,这非常好用!其实没什么难度。Winradio API 的文档有点混淆(在我的世界中,DWORD 是无符号长整型)。除此之外,这非常容易。非常感谢! - Void Star
你有LIB文件吗? - Royi

4
你可以按照DarkXphenomenon的回答中所述使用LoadLibrary()和GetProcAddress()。另一种选择是通过创建.def文件来为DLL创建自己的导入库,然后通过LIB命令运行该文件以生成导入库。更多详细信息请参见:http://support.microsoft.com/kb/131313

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接