5

.Net によって提供されるいくつかの列挙を使用する、C++\CLI で記述されたアセンブリがあります。次のようなプロパティがあります。

property System::ServiceProcess::ServiceControllerStatus ^ Status  
{  
    ServiceControllerStatus ^ get()  
    {  
        return (ServiceControllerStatus)_status->dwCurrentState;   
    }  
}    

正常に動作しますが、C# コードからこのアセンブリを使用すると、このプロパティの型は

System.Enum

そして私は型キャストをしなければなりません

 if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
     //do smth

質問は簡単です。なぜそうなのか、どうすれば修正できるのでしょうか。

4

2 に答える 2

5

C++/CLI では、 ^は標準 C++ の類似の * に似ています。列挙型は値型であるため、^を含めないでください。そうしないと、System.Enumとして表示されます。

^ を削除すると、C# 側で正しい列挙が表示されます。

property System::ServiceProcess::ServiceControllerStatus Status  
{  
    System::ServiceProcess::ServiceControllerStatus get()  
    {  
        return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;   
    }  
}
于 2008-09-22T14:22:13.913 に答える
3

列挙型は ^ を使用しないと思います -- プロパティ宣言と get() から削除してみてください。

于 2008-09-22T14:11:11.960 に答える