从 C++ 调用 dll 函数

Posted

技术标签:

【中文标题】从 C++ 调用 dll 函数【英文标题】:Calling a dll function from C++ 【发布时间】:2012-11-30 15:27:52 【问题描述】:

我想从我的 C++ 应用程序调用的 dll 中有一个函数。 dll 也是用 C++ 制作的,并且有一个 def 文件,其中显示了 dll 中存在的函数。我正在使用visual studio 2010,我通过在链接器“附加库目录”中添加dll的目录,然后在链接器的“输入”中添加DLLname.lib,将其配置为使用dll文件。现在 dll 中的所有命名空间都可用,但是我需要的函数不可用,因为它们不在任何命名空间下。我该如何访问这些功能?这些函数是在 dll 中声明的

#include "stdafx.h"
#include <stdio.h>
__declspec(dllexport) int somefunction()

......
            return SomeValue

我的问题是如何通过其 dll 访问我的 C++ 应用程序中的某些功能。

【问题讨论】:

【参考方案1】:

这里似乎有些混乱。将文件添加到链接器输入用于静态链接库(Windows 上的 .lib)。使用静态链接库,代码只是在编译时复制到您的程序中。动态链接库(Windows 中的 .dll)驻留在不同的文件(DLL)中,并在您的程序运行时加载。要访问 dll 中的函数,主要有两种方法:

使用dllimport,类似于使用 dllexport 导出函数的方式

使用 LoadLibrary 加载 DLL,然后使用 GetProcAddress 获取指向您的函数的指针。如果您使用此方法,您应该注意的另一件事是您可能应该在要导出的函数上使用extern "C" 以避免name mangling。如果您在使用 GetProcAddress 查找函数时遇到问题,可以使用 Dependency Walker 检查 DLL 中的函数名称 - 根据使用的 calling convention,它们可能会稍作修改。

【讨论】:

【参考方案2】:

我认为发帖者正在寻求有关隐式链接的帮助。 MSDN Linking Implicitly 和 Wikipedia Dynamic-link library Using DLL imports

【讨论】:

以上是关于从 C++ 调用 dll 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 调用 VB.NET DLL(也调用函数 - 不仅仅是 DLL 文件)

从 Qt (c++) 调用 DLL 中的函数

将 C++ 结构指针从 Perl 传递给任意 dll 函数调用

从 Delphi“访问冲突”正确调用 DLL 中的 C++ 函数

c++调用dll导出函数

从 10.3 项目调用 c++ 函数(bcb6 dll/lib)函数