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

时间:2014-05-16 18:01:40

标签: c++ c dll c++-cli

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

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

感谢。

2 个答案:

答案 0 :(得分:6)

好的,所以“带有C ++的WPF”不是一种语言。 WPF是一个.NET库。 C ++ / CLI是您正在编写的语言。

从C ++ / CLI调用C dll“非常简单”,具体取决于DLL的导出方式。您可以使用.NET库来执行此操作,也可以使用C库(我建议使用C库)。有两种方法可以链接到dll:隐式链接或显式链接。

隐式链接更清晰,imho。但是您需要访问头文件(编辑:可能使用declspec装饰,请参阅下面的BenVoigt注释)和.lib文件。如果您有任何这些,只需将.lib文件添加到Additional Dependencies(右键单击project-> properties-> Configuration Properties-> Linker-> Input)并将头文件路径添加到include(右键单击项目 - > properties->配置属性 - > C / C ++ - >常规)。然后你可以把头文件(提到这个的metacubed的道具)作为extern“C”头文件包含在内:

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

(这是因为C ++会进行名称修改,因此您可以拥有重载和名称空间以及类和内容。如果您不知道,它会将您的C头文件解释为C ++头文件(并且会破坏您的所有名称)不要使用extern "C"

http://msdn.microsoft.com/en-us/library/d14wsce5.aspx

或者您可以明确链接

http://msdn.microsoft.com/en-us/library/784bt7z7.aspx http://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

答案 1 :(得分:2)

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

  1. 包含头文件。请参阅下面的语法。
  2. .lib添加为项目的导入依赖项。还要将链接器设置为使用DLL。有关所有详细信息,请参阅Linking implicitly
  3. 确保在程序执行时,运行时类路径中存在消耗的DLL。
  4. 使用头文件中定义的函数。
  5. 头文件include应声明为:

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

    这就是全部!

    编辑:另外,请检查一下:Call a C function from C++ code