从C#访问C ++类枚举值

时间:2013-01-04 16:12:43

标签: c# c++

我试图从C#访问C ++类头(.h)中的枚举。有一个简单的方法吗?我看到的每个例子都涉及将类编译成.dll,对于这个例子来说这是一种浪费,因为这个类的功能非常有限。

按请求编辑:可以修改C ​​++库。事实上,C ++库是项目(固件)的主要组成部分,由我团队的其他成员开发,C#(我的部分)仅用于单元测试目的。

3 个答案:

答案 0 :(得分:7)

实际上,您有三种选择:

  1. 创建一个胶水库,导出包含此标题的C函数(extern "C")并返回您感兴趣的枚举值,然后从C#调用此库。
  2. 对C#代码中的值进行硬编码。
  3. 编写C ++解析器并以该方式提取值。 (要么是一个完整的C ++解析器,哪个更好,或者你可以懒惰并编写一个简单的正则表达式解析器,它将在这个特定版本的C ++头文件上工作,但如果代码以你所做的方式改变,将来可能会破坏不要期待。)

答案 1 :(得分:0)

为了访问C ++枚举,您必须将C ++类转换为.NET可以识别的东西,这或者意味着将其编译为C ++ / CLI(如果这是一个选项)或者转换为DLL。 NET互操作可以访问。

答案 2 :(得分:0)

好吧,这让CS预编译器有点怪,但它构建了:

#if CSHARP

namespace Test
{
    public enum SharedEnum

#endif //CSHARP

#if CPP
    typedef enum SharedEnum 
#endif //CPP
    {
        One,
        Two,
        Three
    }
#if CPP
    SharedEnum 
#endif //CPP
    ;
#if CSHARP
};
#endif

只需将条件编译符号CSHARP添加到C#项目中,将现有的.cs文件和预处理器定义CPP添加到C ++项目中。

(感谢Yakk有同样的想法)