2012-07-28 74 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