我有一个包含常量定义的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#中的枚举。我想在上面的预期定义中做出没有/最小的更改,因为在上面的结构中还有其他代码依赖(在两个项目中)(但如果没有以当前格式实现这一点的好方法,可能会这样做)
答案 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#。