从C ++调用dll函数

时间:2012-11-30 15:27:52

标签: c++ dll

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

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

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

2 个答案:

答案 0 :(得分:14)

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

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

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

答案 1 :(得分:1)

我认为这张海报正在寻求隐式链接方面的帮助。 MSDN Linking ImplicitlyWikipedia Dynamic-link library Using DLL imports