2015-02-09 137 views
0

我使用freecommandlinetools編譯器bcc32。我需要在我的程序中使用第三方DLL。我不想撥打LoadLibraryGetProcAddress,而是將我的程序中的dll鏈接到直接調用dll函數。Borland C++編譯器中的鏈接DLL

#include "somelibrary.h" 

int main() { 
    somefunction(); // defined in somelibrary.dll 
} 

我看到未解決的外部嘗試編譯。如何說服連接器與somelibrary.dll鏈接?

+0

dll中的函數需要使用[__declspec](https://msdn.microsoft.com/en-us/library/a90k134d.aspx)導出,是嗎? – 2015-02-09 12:34:55

+0

是的,他們是。在MinGW編譯器中我沒有使用它們的問題,我只是不知道borland的方式。 – 2015-02-09 12:36:31

+0

首先使用dumpbin/EXPORTS your.dll來查看從dll導出的符號。接下來,爲它編寫一個.def文件,並按照此處列出的步驟進行操作:https://support.microsoft.com/kb/131313/en-us然後,將您的程序與導入庫鏈接,並且可以避免LoadLibrary()和GetProcAddress的()。 – BitTickler 2015-02-09 12:38:43

回答

4

您必須創建一個.lib才能直接鏈接該dll。 假設您的DLL user32.dll中:

implib -a -c -f user32.lib user32.dll 

將創建USER32.LIB用user32.dll中的所有符號。然後將您的項目與user32.lib而不是user32.dll鏈接。

您可以使用impdef.exe命令查看由dll導出的符號。如果這些符號已經以下劃線'_'開頭,則可以省略implib命令中的-a。

+0

啊,'-a'開關是萬惡之源!優秀! – 2015-02-09 13:57:50