c# - 是否可以在 C# 和非托管 C++ 之间共享枚举声明?

标签 c# c++ enums native managed

有没有办法在本地(非托管)C++ 和(托管)C# 之间共享枚举定义?

我在完全非托管代码中使用了以下枚举:

enum MyEnum { myVal1, myVal2 };

我们的应用程序有时会使用托管组件。该 C# 组件通过托管 C++ 互操作 dll(来自 native dll)将枚举项值作为整数获取。 (互操作 dll 仅在需要 C# 组件时才加载。)C# 组件复制了枚举定义:

public enum MyEnum { myVal1, myVal2 };

有没有办法在不将原生 C++ dll 转换为托管 dll 的情况下消除重复?

最佳答案

您可以使用单个 .cs 文件并在两个项目之间共享它。 #include 在 C++ 中的 .cs 文件应该没问题。

这将是一个示例 .cs 文件:

#if !__LINE__    
namespace MyNamespace
{
    public 
#endif

// shared enum for both C, C++ and C#
enum MyEnum { myVal1, myVal2 };

#if !__LINE__
}
#endif

如果你想在一个文件中包含多个枚举,你可以这样做(尽管你必须暂时将 public 定义为对于 C/C++ 来说什么都不是):

#if __LINE__
#define public
#else
namespace MyNamespace
{
#endif

    public enum MyEnum { MyEnumValue1, MyEnumValue2 };
    public enum MyEnum2 { MyEnum2Value1, MyEnum2Value2 };
    public enum MyEnum3 { MyEnum3Value1, MyEnum3Value2 };

#if __LINE__
#undef public
#else
}
#endif

关于c# - 是否可以在 C# 和非托管 C++ 之间共享枚举声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954321/

相关文章:

c# - 回调的概念 (C#)

c# - 显示进度条,直到 Webgrid 完全加载并分页到 MVC 中 Webgrid 中的下一页或上一页

c++ - 为什么 'operator>' 需要 const 而 'operator<' 不需要?

ruby-on-rails - Rails 4 迁移将列数据类型从字符串更改为整数并保留数据 (postgres)

MySQL : Selecting count of mutiple enum value

c++ - enum 类型是 unscoped 更喜欢 enum 类而不是 enum?

c# - 在 C# 中从 XML 中删除元素

c# - 判断 SqlTransaction 是写入数据还是只读

c++ - 为什么我需要在分配时用()初始化动态分配的数组?

c++ - 具有两个 cpp_int 值的 boost::multiprecision::pow