如何调用C DLL函数c++ /CLI

How to call C DLL functions C++/CLI

本文关键字:函数 DLL c++ CLI 何调用 调用      更新时间:2023-10-16

我已经查看了很多在线搜索,大多数都有谈论c#与C或c++与c#的例子,但从未遇到过使用c++调用C DLL(特别是在我的情况下从c++/CLI与WPF)。

有人可以用一个例子来解释如何在c++中调用C DLL函数。我有一个C DLL,它的所有函数都定义为extern"C"funcName(),还有一个导出函数。def文件,其中包含所有需要导出的函数名称。现在有了这个C DLL,我如何在c++代码中调用它的导出函数。

谢谢。

好的,所以"WPF with c++ "不是一门语言。WPF是一个。net库。c++/CLI是你正在使用的语言。

从c++/CLI调用C DLL"相当容易",这取决于DLL是如何导出的。你可以使用。net库或C库(我建议使用C库)来做到这一点。链接到dll有两种方式:隐式链接或显式链接。

隐式链接要干净得多。但是您需要访问一个头文件(Edit: 可能是带有declspec修饰,参见下面BenVoigt的注释)和一个.lib文件。如果您有这些,只需将.lib文件添加到Additional Dependencies(右键单击project->properties->Configuration properties-> Linker->Input),并将头文件路径添加到include(右键单击project->properties->Configuration properties->C/c++ ->General)。然后,您可以将头文件(props to metacubed for mention this)包含为外部"C"头文件:

extern "C"
{
   #inlude "c_header.h"
}

(这是因为c++做了名称混淆,这样你就可以重载&名称空间,课程之类的。如果你不使用extern "C"

,它会将你的C头文件解释为c++头文件(并混淆你所有的名字)。http://msdn.microsoft.com/en-us/library/d14wsce5.aspx

或者你可以显式链接

http://msdn.microsoft.com/en-us/library/784bt7z7.aspxhttp://msdn.microsoft.com/en-us/library/zzk20sxw.aspx

但我怀疑,弄清楚你正在使用c++/CLI,它会告诉你该谷歌什么。(虽然c++的答案也适用于你)。

对于。net方式,一个简单的技巧是查找c#调用(请注意,这也是显式链接,因此不需要。lib文件和头文件)。 http://msdn.microsoft.com/en-us/library/eyzhw3s8.aspx

现在棘手的一点是,如果您正在使用c++/CLI,并希望将您的花哨的托管类转换为C形式,则必须对封送代码。

http://msdn.microsoft.com/en-us/library/ac7ay120%28vs.71%29.aspx

从c++ dll调用C dll函数是完全相同的,无论是WPF, c++/CLI还是本机c++。

  1. 包含头文件语法见下文。
  2. .lib作为导入依赖项添加到项目中。还要将链接器设置为使用DLL。查看隐式链接了解所有细节。
  3. 确保当程序执行时,使用的DLL存在于运行时类路径中。
  4. 使用头文件中定义的函数

头文件include应该声明为:

extern "C" {
    #include "c_header.h"
}

就是这样!

编辑:另外,看看这个:从c++代码调用C函数