2008-09-22 6 views
5

Ich habe eine Assembly, geschrieben in C++ \ CLI, die einige der von .Net bereitgestellten Enumerationen verwendet. Es hat eine solche Art von Eigenschaften:Ein Problem beim Konvertieren von Enumerationen in C++ CLI

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

es funktioniert gut, aber wenn ich diese Versammlung von meinem C# -Code verwenden, geben Sie dieser Eigenschaft ist

System.Enum 

und ich muss Typ Guss

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

Die Frage ist einfach: warum ist es so, und wie man es repariert?

Antwort

5

In C++/CLI ^ ist wie die Analoge * in Standard C++. Da Aufzählungen Werttypen sind, sollte die ^ nicht enthalten sein, andernfalls sehen Sie sie als System.Enum.

Entfernen Sie die^und Sie sehen die korrekte Aufzählung auf C# -Seite.

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

Ich denke, Enums verwenden nicht die^- versuchen Sie es aus der Eigenschaftsdeklaration und get() entfernen.

Verwandte Themen