当前位置: 首页 > 编程语言 > C#

将C ++枚举导入C#分享

时间:2023-04-11 12:13:43 C#

C#学习教程:将C++枚举导入C#我需要在C++应用程序中存在的C#应用程序中使用错误枚举。我不想在C#中重新声明枚举,因为如果文件没有一起更新,它可能会导致同步问题。所有这些都解释了我的问题:有没有办法让我采用这样声明的枚举:typedefenum{eDEVICEINT_ERR_FATAL=0x10001...}eDeviceIntErrCodes;并像这样在C#程序中使用它:eDeviceIntErrCodes.eDEVICEINT_ERR_FATAL查看PInvoke互操作助手工具http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=14120。它是为本机方法生成PInvoke签名的有用工具。如果我将它提供给您的枚举,它会生成此代码。包含该工具的命令行版本,因此您可以构建一个自动化过程,以便在C++版本更改时使枚举的C#定义保持最新。publicenumeDeviceIntErrCodes{///eDEVICEINT_ERR_FATAL->0x10001eDEVICEINT_ERR_FATAL=65537,}在C/C++中,您可以#include包含枚举定义的.cs文件。谨慎使用预处理器指令可以解决C#和C之间的语法差异。示例:#ifCSharpnamespaceMyNamespace.SharedEnumerations{public#endifenumMyFirstEnumeration{Autodetect=-1,Windows2000,WindowsXP,WindowsVista,OSX,Linux,//计数必须是最后一个条目-用于确定枚举计数中的项目数};#ifCSharppublic#endifenumMessageLevel{None,//消息被忽略InfoMessage,//消息被写入信息端口。InfoWarning,//消息被写入信息端口并发出警告Popup//用户被警告消息};#ifCSharppublicdelegatevoidMessageEventHandler(MessageLevellevel,stringmessage);}#endif在C#工程中,设置条件编译符号“CSharp”,确保C/C++编译环境中没有预置的Processor定义。请注意,这只能确保这两个部分在构建时同步。如果您混合和匹配来自不同构建的二进制文件,保证将失败。简单回答是不。抱歉,您将不得不重新申报。过去,我不得不编写脚本将我的C++枚举导入到enums.cs文件中的C#格式,并将其作为构建的一部分运行,这样一切都会同步。如果您已这样声明枚举:namespaceblah{enumDEVICE_ERR_CODES{eDEVICEINT_ERR_FATAL=0x10001,eDEVICEINT_ERR_OTHER=0x10002,};}在另一个文件中:DEVICE_ERR_CODESeDeviceIntErrCodes;并使用.cs扩展名命名枚举文件,您也许能够使其正常工作。您可以像这样引用它:DEVICE_ERR_CODESerr=DEVICE_ERR_CODES.eDEVICEINT_ERR_FATAL;如果您在C++/CLI中定义强枚举,则枚举代码将包含在dll元数据中。所以你可以在C#中使用枚举代码。以上就是C#学习教程:C++枚举导入C#全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——publicenumclasseDeviceIntErrCodes:int{eDEVICEINT_ERR_FATAL=0x10001...};本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: