如何使用DLL中的函数?我是一个新手,我真的不懂如何使用DLL文件中的函数。我正在尝试使用MS Visual Studio 2008(C ++)。
我的理解是DLL文件将有相应的头文件,只要我包含头文件并在我的代码中正常调用函数,它应该工作吗?那是对的吗?然后我只需要编译的exe文件能够找到DLL?
如果这是一个远程正确的理解,请告诉我!
谢谢!
罗素
答案 0 :(得分:3)
要重用DLL中声明的函数,您有两个选择:
第一个(并且更可取)是包含声明要使用的函数的相应头文件,然后链接到相应的.lib。第二步似乎是静态链接到函数,但实际上最终是一个存根调用,当调用相应DLL中包含的第一个函数时,它将DLL加载到内存。例如,要使用CreateWindowEx函数,请包含“WinUser.h”标题并链接到“User32.lib”库。
第二个选项是手动加载库。为此,您将调用LoadLibrary函数来获取DLL的句柄,以获取所需的函数,然后使用GetProcAddress获取指向该函数的指针。返回的指针需要转换为适当的类型,然后您可以将它用作任何常规函数指针。仅当您无权访问实现者的标头和库时,才建议使用此选项,因为在函数声明中存在使用不正确的参数或不匹配的调用约定的风险。
PS - 我正在简化一点,但这是该过程如何运作的核心。
答案 1 :(得分:0)
一个非常简单的Google搜索为您找回了答案。
第一个链接,阅读几个部分,并在“从Visual Basic应用程序中调用DLL函数”http://msdn.microsoft.com/en-us/library/dt232c9t.aspx
答案 2 :(得分:0)
你走在正确的轨道上,却错过了重要的一步。
为了使用DLL,您还需要链接它的导入库。您可以通过在链接器/输入/附加依赖项下指定导入库的名称来执行此操作。
答案 3 :(得分:0)
有很多方法可以将DLL链接到C ++应用程序!
在项目中包含DLL头文件和Lib文件(包含链接信息) 调用DLL函数作为正常函数。缺点是应用程序将在启动时加载DLL,如果在%path%或base目录中找不到它,则会抛出异常。
使用LoadLibrary API和GetProcAddress API方法加载库。这样,您需要在LoadLibrary中传递DLL路径,如果加载成功,您可以使用函数指针来访问您需要调用的函数。请参阅示例here