【问题标题】:Using enum in c++ and c# via c++ header通过 c++ 标头在 c++ 和 c# 中使用枚举
【发布时间】:2012-11-29 11:23:59
【问题描述】:

我有一个用 C++ 编写的服务器,它位于命名管道的末端,嗯,服务于事物。可以发送到服务器的命令在位于头文件中的枚举中定义。

enum {
    e_doThing1,
    e_doThing2
    ...
    e_doLastThing
};

所需枚举的值被放入发送到服务器的消息的第一个字节中,以便它知道要做什么。我现在正在编写一个需要访问服务的 C# 客户端。

有什么方法可以将标头包含到 C# 代码中,这样我就不必在两个位置维护相同的列表?

谢谢, 帕特里克

【问题讨论】:

标签: c# c++


【解决方案1】:

如果您要将枚举放入命名空间并为其命名,您可能只需将头文件直接添加到 C# 项目中。

已编辑最终解决方案:
这种方法行不通,但反过来会 - 将标头命名为 .cs 并包含在 C# 项目中,然后是 C++ 中的#include。

【讨论】:

  • 好主意,您不需要命名空间,但确实需要将文件重命名为 *.cs,否则编译器看不到枚举(枚举已经有了名称)。很遗憾它不可能那么简单:(
  • @Patrick:没有什么能阻止 C++ 编译器#包括 .cs 文件。
【解决方案2】:

您能否使用自动化流程(如在 C# 项目中定义的预构建步骤)生成文件副本?我认为,您需要做的就是创建一个在“enum”和“{”之间添加名称的文件副本。

编辑:根据您的 C++ 服务器公开的接口类型,.NET 甚至可以自动生成接口文件。例如,如果这个枚举是在 COM 接口或 .NET 远程接口中定义的,我认为会有一种自动的方法在客户端根据服务器的编译代码生成枚举。

【讨论】:

    【解决方案3】:

    您可以为此使用托管 C++。在托管 C++ 项目中包含标头,您可以在 C# 中使用它。

    【讨论】:

      【解决方案4】:

      您可以像这样使用宏定义: 在 C# 包装器上:

      public enum class eAlgId
       {
         ENUM_PARAMETERS
       };
      

      在 cpp 上:

      enum ProcAlgID
      {
       ENUM_PARAMETERS 
      };
      

      以及双方都知道的 .h 文件:

      #define ALG_ENUM_PARAMETERS \

      et1 = 0, et2, et3, et4

      【讨论】:

        猜你喜欢
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多