4

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

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

4

5 回答 5

4

为什么不获取常量文件并将其单独打包为 App.Constants.dll 之类的程序集,并让 C# 和 c++ 项目都引用它们?这样,您可以在一个地方进行更改。拥有基于项目的引用,以便在 Visual Studio 中轻松使用。

于 2009-07-30T21:42:16.247 回答
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)。

然后,您将代码编译为您的 C# 项目的一部分/define:CSHARP,并将#include其编译为一些 C++ 标头,而无需额外定义。

于 2009-07-30T22:03:42.570 回答
1

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

于 2009-07-30T22:56:42.197 回答
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.h
MAKECONST(NumFruitInABowl, 3)
MAKECONST(NumBowls, 2)
于 2009-07-30T23:10:18.457 回答
0

使用SWIG将 C++ 代码转换为 C# 的自动化方法。

于 2009-07-30T23:20:54.503 回答