C++\CLI での列挙型の変換に関する問題
-
02-07-2019 - |
質問
C++\CLI で書かれたアセンブリがあり、.Net によって提供される列挙型の一部を使用します。このような種類のプロパティがあります。
property System::ServiceProcess::ServiceControllerStatus ^ Status
{
ServiceControllerStatus ^ get()
{
return (ServiceControllerStatus)_status->dwCurrentState;
}
}
正常に動作しますが、C# コードからこのアセンブリを使用すると、このプロパティの型は次のようになります。
System.Enum
そしてタイプキャストをしなければなりません
if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
//do smth
質問は簡単です:なぜそうなるのか、そしてそれを修正するにはどうすればよいですか?
解決
C++/CLI の場合 ^ これは、標準 C++ の * に似ています。列挙型は値型であるため、 ^ 含めないでください。含めないと、次のように表示されます。 System.Enum.
^ を削除すると、C# 側で正しい列挙が表示されます。
property System::ServiceProcess::ServiceControllerStatus Status
{
System::ServiceProcess::ServiceControllerStatus get()
{
return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;
}
}
他のヒント
enum は ^ を使用していないと思います -- プロパティ宣言と get() からそれを削除してみてください。
所属していません StackOverflow