将C ++ / CLI转换为C#

时间:2020-03-05 18:56:22  来源:igfitidea点击:

我有一个使用C ++ / CLI的中小型项目。我真的很讨厌C ++ / CLI的语法扩展,我更喜欢在C#中工作。有没有一种工具可以将一个人翻译成另一个人呢?

编辑:当我说托管c ++之前,我显然是说c ++ / CLI

解决方案

回答

.NET托管C ++就像火车残骸。但是,我们是否研究过C ++ CLI?我认为Microsoft在使C ++成为一流的.NET公民方面做得很好。

http://msdn.microsoft.com/zh-CN/magazine/cc163852.aspx

回答

大约2004年以前,Microsoft确实有一种工具可以将托管C ++转换为C ++ / CLI...。我们在几个项目上运行了该项目,但是老实说,清理项目所剩下的工作量不少于首先要进行手工转换的工作量。我认为该工具从未公开发布过(也许是出于这个原因)。

我不知道我们正在使用哪个版本的Visual Studio,但是我们已经使用/ clr:oldSyntax开关管理了无法与Visual Studio 2005/2008一起编译的C ++代码,并且仍然有一个VS 2003版本。

我不知道从C ++到Cin的任何有用方法...我们可以尝试通过反射器将其往返:)

回答

我不确定这是否行得通,但请尝试将.Net Reflector与ReflectionEmitLanguage插件一起使用。 RelelectionEmitLanguage插件声称可以将程序集转换为ccode。

回答

如果C ++代码是纯托管的,则只能将托管的C ++代码(和C ++ / CLI代码)转换为CIF。如果不是-即如果源代码中包含本机代码,.NET Reflector之类的工具将无法为我们翻译代码。

如果确实混有本机C ++代码,则建议尝试将本机代码移动到单独的DLL中,用易于识别的存根函数替换对DLL函数的调用,将项目编译为纯.NET库,然后使用.NET反射器可反编译为Ccode。然后,可以通过p调用对本机DLL的调用来替换对存根函数的调用。

祝你好运!我为你感到!

回答

此类项目通常在c ++ / cli中完成,因为Cisn并不是执行此任务的理想选择。例如如果我们必须与某些本机C ++库接口,或者在低级C语言中执行非常高性能的工作。那么只需确保选择c ++ / cli的人没有充分的理由在进行切换之前就这样做。

话虽如此,我非常怀疑有什么事情可以满足要求,原因很简单,即并非所有C ++ / cli代码都可以翻译成C语言(反之亦然)。