2012-07-28 69 views
7

很难在谷歌上搜索关于C的主题,因为我一直在找到与C#或C++相关但不是C的结果,所以也许有人可以给我一个快速,直接的答案。如何在C中使用DLL中的函数而无需使用LIB文件?我知道所有的函数原型和他们的名字。在没有lib的C中使用DLL

在此先感谢!

+0

我觉得你老兄! C越来越倾向于背景.. – displayname 2014-02-06 13:54:42

回答

8

是的,你可以。您应该使用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来实现控件,我父亲的魔法遥控器就会完成。 – 2012-07-28 07:10:51

+0

哦,然后我需要制作一个用户界面,我想...... – 2012-07-28 07:11:33

+0

是的,这工作得很好!没有什么真的。 Winradio API的文档有点混乱(显然,他们的世界中的DWORD在我的世界中没有签名)。除此之外,这很容易。非常感谢! – 2012-07-28 23:04:35

3

可以使用的LoadLibrary()和如在由DarkXphenomenon答案描述GetProcAddress的()。或者,另一种方法是通过创建一个.def文件然后通过LIB命令运行该文件来生成一个导入库来为DLL创建自己的导入库。这里的更多细节:

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