由于多种原因,我需要将C / C ++非托管项目(VS 2008)移植到C#(最好是.net 3.5)。
我需要知道:
在哪里可以找到一些有用的howtos / articles ......。 如果它们包含如下特定提示,它们将非常有用:
应该在公共静态类中设置 extern variables
(我不知道,我猜...)
请不要像“你可以从.net调用你的c ++ dll”这样的建议,因为我知道这是可能的,但我不能。
P.S。
我在询问之前搜索了goole和SO,但我找不到任何类似或有用的链接/问题/答案。如果你找到一个或者你认为这个问题必须关闭,请不要犹豫
P.P.S。
抱歉我的英语很差。
修改
一些额外的信息:
答案 0 :(得分:2)
转换它会花费你更多的钱来包装它并支付一个自由职业者(像我一样)来帮助你每隔几个月(或每几年)为你改变C ++代码,当你需要做一个更改。有一些机械方法,但更大的问题是你永远不能确定新的C#代码完全与旧的C ++代码完成的那样。我有客户试过这个,大多数人放弃了,把工作扔掉了。那些成功的人做得非常缓慢,就像这样:
首先,您包装旧库并获取您的UI或任何新代码(Web服务,无论如何)成功调用旧库。这让每个人都“砰然一声”,并且花时间来解决“我们无法维护旧代码”的问题。您还开发了一个全面的测试套件,它可以证明旧库为各种边缘情况做了什么,以及每隔几年才会发生的奇怪事情。随着时间的推移,您将旧库中的功能移动到新的C#中,并更改调用代码以使用新库来实现该功能。您最先移动最易变的部分,即最常更改的部分。在每个阶段,您再次运行测试用例,以确保从C ++到C#的转换不会弄乱它计算的结果。也许其中一些你永远不会搬出去,也许最后它都被感动了。当您感觉无法维护自己的图书馆并且需要付费给某人为您做这件事的风险已经低于继续翻译它的成本时,您就会停止。
我建议您在开始时可以访问具有良好C ++技能的人。你可能会遇到对你没有多大意义的事情。但是你可以很快从图书馆获得价值,并且从长远来看仍然可以解决你的潜在问题。
答案 1 :(得分:1)
取决于您对港口的意思。
你可以用C#重写一些东西。不是一切。即使您移植自己的代码,也必须使用C / C ++处理某些HW或旧库。我不知道任何可靠的C ++自动转换器 - > C#,我怀疑它可以存在。
更好的想法可能是将现有代码包装在新的C#代码中。例如,您可以在C ++ / CLI中创建互操作层。或者,如果您不想在同一进程中混合本机/托管代码,则可以使用Google协议缓冲区等与本机代码进行通信。
答案 2 :(得分:1)
我怀疑代码转换工具会有所帮助。如果你需要用.NET以某种方式使一些C ++工作,最简单的方法是编写一个包装它的托管C ++层,并为.NET应用程序提供一个界面。但这取决于代码。
重写的目的是什么?您的代码有什么作用?它是否与其他组件接口?它有GUI吗?它是独立的可执行文件还是库?它是COM / ActiveX服务器还是使用COM组件?它是否链接到其他DLL或使用第三方库?
所有这些都会影响您如何从头开始/重写您的应用。例如,如果您的代码是MFC应用程序,您可能会忘记尝试抢救大量代码。如果您的应用程序具有http /高级网络功能,您也可以从头开始编写。如果您的代码级别较低,则可能需要使用某些C#进行重构,并且可以通过托管C ++层访问某些C ++。
很多选择,这取决于你的应用程序在做什么,如何编写等等。