从C++调用dll函数

Calling a dll function from C++

本文关键字:函数 dll 调用 C++      更新时间:2023-10-16

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

#include "stdafx.h"
#include <stdio.h>
__declspec(dllexport) int somefunction()
{
......
return SomeValue
}

我的问题是如何通过C++应用程序中的dll访问它。

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

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

  • 使用LoadLibrary加载DLL,然后使用GetProcAddress获取指向函数的指针。如果您使用这种方法,还需要注意的是,您可能应该在导出的函数上使用extern "C",以避免名称混乱。如果您在使用GetProcAddress查找函数时遇到问题,可以使用Dependency Walker来检查DLL中的函数名称——根据使用的调用约定,这些名称可能会略有修改。

我想海报是在寻求关于隐式链接的帮助。MSDN隐含链接和维基百科动态链接库使用DLL导入