自动将简单的C ++代码转换为C#

时间:2009-07-30 21:35:39

标签: c# c++ code-translation

我有一个包含常量定义的C ++文件,我想在C#项目中使用相同的定义。由于这两个项目都是更大项目的一部分,我想如果C ++文件中有更改(添加/删除),它也应该反映在相应的C#文件中。我想保持2个文件同步。我想知道是否有脚本/工具来执行此操作。

反向解决方案(C# - > C ++)也可以使用。

澄清:

目前代码是:

//C++ 
    struct Colors{ 
         static const int Red = 100; //Custom Values are important 
         static const int Green = 101; } 
//C#

public enum Color{ Red = 100; Green =101; }

现在我想拥有一个文件,以便C ++中的任何更改都反映在C#中(或其他方式),这样我就可以在项目中为这些常量创建一个文件。

如您所见,我想将C ++中结构中定义的一堆常量映射到C#中的枚举。我想在上面的预期定义中做出没有/最小的更改,因为在上面的结构中还有其他代码依赖(在两个项目中)(但如果没有以当前格式实现这一点的好方法,可能会这样做)

5 个答案:

答案 0 :(得分:4)

为什么不将constants文件单独打包并将其打包为App.Constants.dll之类的程序集,并让C#和c ++项目引用它们?通过这种方式,您可以在一个地方进行更改。使用基于项目的引用可以在Visual Studio中轻松实现。

答案 1 :(得分:1)

假设普通的整数常量等,应该可以通过创造性地使用预处理器来重用相同的源文件。像这样:

#if CSHARP
public class Constants {
#else
#  define public
#endif

// Easy stuff
public const int FOO = 1;
public const int BAR = 2;

// Enums can be done too, but you have to handle the comma
public enum Color { COLOR_RED, COLOR_GREEN, COLOR_BLUE }
#if !CSHARP
;
#endif

#if CSHARP
}
#else
#  undef public
#endif

您可能需要某些类型的typedef以使其名称匹配(例如typedef unsigned int uint)。

然后使用/define:CSHARP将代码编译为C#项目的一部分,并将#include编译为某些C ++标头,而不添加其他定义。

答案 2 :(得分:1)

您可能找不到脚本......您应该拥有自己的脚本来执行此操作。否则MACRO最适合......
如果您有脚本,则可以在makefile中创建一个规则,该规则将在您构建项目时自动运行此脚本。

答案 3 :(得分:1)

您要做的是创建一个托管C ++库,其中包含可在非托管C ++和C#中重用的格式的常量和枚举。

托管版本:

//managed.cpp
#define MAKECONST(name, value) public const int ##name = ##value; 

public enum class FruitType
{
    #include "FruitType.h"
};

pubilc ref class Constants {
   #include "const.h"
};

非托管版本:

//unmanaged.cpp
#define MAKECONST(name, value) const int ##name = ##value;

enum FruitType
{
    #include "FruitType.h"
};

#include "const.h"

实际的枚举定义:

//FruitType.h
Apple = 1,
Banana,
Lychee

consts文件:

//consts.h
MAKECONST(NumFruitInABowl, 3)
MAKECONST(NumBowls, 2)

答案 4 :(得分:0)

执行此操作的自动方法,使用SWIG将C ++代码转换为C#。