将本机代码enum
转换为托管代码enum
(包含相同的enum
值)的正确方式(在C++/CLI中)是什么?在C++/CLI中使用C#的投射方式有什么区别,例如(int)
。C++/CLI:从非托管枚举转换为托管枚举
25
A
回答
37
假设您的本机代码
enum shape_type_e
{
stUNHANDLED = 0, //!< Unhandled shape data.
stPOINT = 1 //!< Point data.
...
};
和托管代码是
public enum class ShapeType
{
Unhandled = 0,
Point = 1,
...
};
您可以从托管到本机采用
shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);
我总是用static_cast
投,不是C#的铸造方式。
1
这取决于。例如,如果您有一个具有ushort基础类型的CLI枚举,则它不能保持257的值。默认情况下,CLI枚举基于int,在大多数情况下应该没问题。如果您的本机C++代码使用无符号32位整数/ 64位整数作为底层类型(如果枚举),请将CLI枚举的基本切换为UInt32 long或ulong。
+2
我不会遇到这个问题,因为两个枚举都是int类型的。但是在这种情况下应该使用哪种类型的演员?它应该是const_cast,static_cast,dynamic_cast,reinterpret_cast,safe_cast或只是C#转换(例如(int))? – Lopper 2009-12-10 01:40:27
相关问题
- 1. 转换枚举来枚举
- 2. 枚举依托整数布尔转换
- 3. 我如何使用枚举::的getName非托管C++
- 4. 使用非托管的FindFirstVolume枚举C#中的.NET的卷#
- 5. Angular2 - 管道转换枚举窗体API
- 6. 将非托管转换为托管过程中的托管
- 7. 不能转换UserQuery枚举枚举
- 8. C++托管到非托管转换
- 9. 正确转换为枚举
- 10. Convert.ChangeType并转换为枚举?
- 11. 将枚举转换为uint
- 12. 隐式转换为枚举
- 13. 价值转换问题:从枚举类型“枚举NSEventMask”
- 14. 字符串转换为枚举的枚举名
- 15. 将Objective-c的枚举转换为Android的枚举
- 16. 将java枚举转换为scala枚举json4s序列化
- 17. 在Postgres中将枚举类型整数转换为枚举
- 18. 转换结构手柄从托管到非托管C++/CLI
- 19. 将托管字节数组转换为非托管字符串
- 20. 如何将非托管双转换为托管字符串?
- 21. c#:通常将非托管阵列转换为托管列表
- 22. 与protobuf的枚举替换C++枚举
- 23. Groovy:在枚举中委托属性
- 24. 枚举的委托方法声明
- 25. 转换枚举在Python
- 26. 转换枚举迭代器
- 27. 枚举类对象转换
- 28. 转换枚举内HTML
- 29. 带枚举的MySQL枚举
- 30. Java枚举找到枚举
从上面的代码,我想你是从本地投射到托管枚举。从托管到本地的其他方面呢? – Lopper 2009-12-10 06:53:38
静态演员是你的朋友的两种方式... nativeST = static_cast(managedST); –
mcdave
2009-12-10 07:01:28
谢谢mcdave! :) – Lopper 2009-12-10 07:01:51