10

如何在没有 LIB 文件的情况下使用 C 中的 DLL 中的函数?我知道所有的函数原型及其名称。

4

2 回答 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);
   }
}
于 2012-07-28T04:23:06.550 回答
4

您可以按照 DarkXphenomenon 的答案中所述使用 LoadLibrary() 和 GetProcAddress()。或者,另一种选择是通过创建一个 .def 文件然后通过 LIB 命令运行该文件以生成一个导入库,从而为 DLL 创建您自己的导入库。此处的其他详细信息:

http://support.microsoft.com/kb/131313

于 2012-07-28T04:29:23.210 回答