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

如何从本机C ++调用C#库(使用C ++ \ CLI和IJW)

如何从本机C ++调用C#库(使用C ++ \ CLI和IJW)

浮云间 2019-11-13 13:16:40
作为较大任务的一部分,我需要使非托管C ++和C代码可以访问C#库。为了自己回答这个问题,我过去几天/几周一直在学习C ++ / CLI。从不受管理的C ++和C中使用C#dll似乎有许多不同的方法。简要地讲,一些答案似乎是:使用Interlope服务,使用.com。然后使用PInvoke(似乎仅从C#到C ++)并在C ++ / CLR中使用IJW(这似乎是Interlope服务)。我认为最好建立一个可能是CLR包装器的库,该库使用IJW代表本机C ++和C代码调用C#dll。细节:我需要将字符串以及int的值从c ++代码传递到C#dll,然后返回void。相关性:许多公司有很多借口来混合和匹配C ++,C和C#。性能:非托管代码通常更快,接口:托管人员也告诉我们,托管接口通常更易于维护,部署,并且通常更易于使用。旧版代码也迫使我们。在那里(就像我们爬过的山一样)。虽然有很多关于如何从C#调用C ++库的示例。通过Googling很难找到如何从C ++代码调用C#库的示例,特别是如果您想查看更新的4.0+代码。软体: C#,C ++ / CLR,C ++,C,Visual Studio 2010和.NET 4.0问题详细信息:可以分为多个部分:使用com对象有优势吗?还是PInvoke?还是其他方法?(尽管我确实在Google Land上找到了有关该主题的更多信息,但我觉得这里的学习曲线也一样陡峭。IJW似乎答应了我想要做的事情。我应该放弃寻找IJW解决方案并专注于此吗?)(优点/缺点?)我是否能想到有解决方案,我编写了一个在C ++ / CLR中利用IJW的包装器?在哪里可以找到有关此主题的更多信息,不要说我对Google的了解不够//或不告诉我您在哪里看到MSDN的情况。(我认为我更喜欢使用此选项,以便编写清晰简单的代码。)问题范围的缩小:我认为我真正的问题和需求是回答以下较小的问题:如何设置C ++ / CLR库,非托管C ++文件可以在Visual Studio中使用。我认为,如果我可以简单地在非托管C ++代码中实例化托管C ++类,那么我也许可以解决其余的问题(接口和包装等)。我希望我的主要愚蠢在于尝试在Visual Studio中设置引用/#includes等,显然我可能还会有其他误解。也许对这整件事的答案可能只是指向帮助我的教程或说明的链接。研究:我已经Google和Bing一遍又一遍,并取得了一些成功。我发现许多链接向您展示了如何使用C#代码中的非托管库。我将承认,有一些链接显示了如何使用com对象进行操作。针对VS 2010的结果并不多。参考资料: 我已经阅读了很多篇文章。我试图通过最相关的工作。有些人似乎非常接近答案,但是我似乎无法让他们工作。我怀疑我所缺少的东西实在太小了,例如滥用关键字ref,缺少#include或using语句,或者滥用命名空间,或者实际上未正确使用IJW功能或缺少VS需要正确处理编译等。所以您想知道,为什么不包括代码?好吧,我觉得自己不在一个我理解并期望自己能工作的代码的地方。我想去一个我了解的地方,当我到达那里时,也许我需要帮助修复它。我将随机包含两个链接,但不允许在当前的生命值级别上全部显示它们。http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod这会从C ++到Visual Basic,再通过C ++ CLR双向调用托管和非托管代码中的代码,当然,我对C#感兴趣。http : //www.codeproject.com/Articles/9903/Calling来自非托管代码和服务的托管代码
查看完整描述

3 回答

?
幕布斯7119047

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

您可以很容易地做到这一点。


创建一个.h / .cpp组合

在新创建的.cpp文件上启用/ clr。(CPP->右键单击->属性)

设置“其他#using目录”的搜索路径以指向您的C#dll。

本机


void NativeWrapMethod();

Native.cpp


#using <mscorlib.dll>

#using <MyNet.dll>


using namespace MyNetNameSpace;


void NativeWrapMethod()

{

    MyNetNameSpace::MyManagedClass::Method(); // static method

}

这是将C ++ \ CLI中的C#库与本机代码一起使用的基础知识。(只需在需要的地方引用Native.h,然后调用该函数即可。)


将C#代码与托管C ++ \ CLI代码一起使用大致相同。


关于这个问题有很多错误的信息,因此,希望这可以节省很多麻烦。:)


我在VS2010-VS2012中做到了(它也可能在VS2008中工作。)


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 864 浏览

添加回答

举报

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