質問

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() からそれを削除してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top