从c#中访问c++类枚举值
本文关键字:枚举 c++ 访问 | 更新日期: 2023-09-27 17:50:38
我试图从c#访问c++类头(.h)中的enum。有什么简单的方法吗?我看到的每个示例都涉及将类编译成.dll,对于这个示例来说,这有点浪费,因为该类的功能非常有限。
Edit by request: c++库可以被修改。事实上,c++库是项目(固件)的主要组件,是由我团队的其他成员开发的,c#(我的部分)只是用于单元测试目的。
实际上,您有三个选择:
- 创建一个glue库,导出一个C函数(
extern "C"
),该函数包含该头文件并返回您感兴趣的enum值,然后P/从c#调用该库。 在c#代码中硬编码该值。 - 编写一个c++解析器并以这种方式提取值。(一个完整的c++解析器,这是最好的,或者你可以偷懒,写一个简单的正则表达式解析器,它将在这个特定版本的c++头文件上工作,但如果将来代码以你意想不到的方式更改,可能会中断。)
为了访问c++枚举,您必须将c++类转换为。net可以识别的东西,这意味着将其编译为c++/CLI(如果这是一个选项)或转换为。net互操作可以访问的DLL。
好吧,这让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有同样的想法)