为了账号安全,请及时绑定邮箱和手机立即绑定

如何从C#调用C ++ / CLI?

如何从C#调用C ++ / CLI?

梦里花落0921 2019-12-10 10:39:27
我有一个用C ++实现的类,它负责程序的算术计算,以及一个使用WPF的接口。我使用C#处理输入,但是如何使用C ++类呢?我已经看到了一些有关使托管C ++包装器类与之交互的评论,但我不知道从哪里开始。我也不知道该如何与其他所有代码一起进行编译。我真的找不到关于此的教程,谷歌在托管C ++上显示的内容似乎并没有帮助。有什么可以帮助我的吗?在我看来,这似乎并不合理。编辑尝试了m3rLinEz解决方案,但它给了我BadImageFormatException,我认为这是因为未生成DLL。我做了一切,不知道发生了什么。有任何想法吗?
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

在同一过程中,至少有三种方法可以从托管代码中调用非托管代码:

  1. C ++ / CLI

  2. 平台调用

  3. 将C ++包装在COM对象中

在工作中,我们为此使用C ++ / CLI,它似乎可以工作。


查看完整回答
反对 回复 2019-12-10
?
ITMISS

TA贡献1871条经验 获得超8个赞

我将按照此处所述创建标准(非COM / Managed)动态链接库,然后在c#代码中使用DllImport属性(平台调用)来访问导出的函数。


那篇文章的重点是:


请注意此代码的方法声明中的__declspec(dllexport)修饰符。这些修饰符使方法可以由DLL导出,以便其他应用程序可以使用它。有关更多信息,请参见dllexport,dllimport。


与实际的COM互操作包装器相比,这是一种较轻的替代方案,并且避免了诸如注册等问题(DLL可以简单地放置在应用程序目录中)。


另一种替代方法是It Just Works(IJW)。如果您已经管理过C ++代码并且需要从其他.NET语言访问此代码,那么这可能是一个更好的选择。但是,如果您能够/很乐意将非托管C ++转换为托管C ++,则这只是一个选择。


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 664 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信