2015-02-09 139 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