將本機代碼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. 將枚舉轉換爲枚舉的MACRO
- 4. 將枚舉轉換爲其他枚舉
- 5. 我如何使用枚舉::的getName非託管C++
- 6. 使用非託管的FindFirstVolume枚舉C#中的.NET的卷#
- 7. 轉換爲枚舉
- 8. Angular2 - 管道轉換枚舉窗體API
- 9. 管理枚舉場
- 10. 將非託管轉換爲託管過程中的託管
- 11. 不能轉換UserQuery枚舉枚舉
- 12. C++託管到非託管轉換
- 13. 將MemberInfo []轉換爲枚舉
- 14. 正確轉換爲枚舉
- 15. 將枚舉轉換爲uint
- 16. XSL轉換爲枚舉
- 17. Convert.ChangeType並轉換爲枚舉?
- 18. 隱式轉換爲枚舉
- 19. 枚舉您可以使用EWS託管API
- 20. 枚舉佔您有權使用EWS託管API
- 21. 價值轉換問題:從枚舉類型「枚舉NSEventMask」
- 22. 在Postgres中將枚舉類型整數轉換爲枚舉
- 23. 字符串轉換爲枚舉的枚舉名
- 24. 將Objective-c的枚舉轉換爲Android的枚舉
- 25. 將java枚舉轉換爲scala枚舉json4s序列化
- 26. 轉換結構手柄從託管到非託管C++/CLI
- 27. 將託管字節數組轉換爲非託管字符串
- 28. 如何將非託管雙轉換爲託管字符串?
- 29. c#:通常將非託管陣列轉換爲託管列表
- 30. 將非託管GUID轉換爲託管指導^
從上面的代碼,我想你是從本地投射到託管枚舉。從託管到本地的其他方面呢? – 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