2016-10-06 58 views
0

我看了幾個地方,但似乎無法找到我正在尋找什麼。我正在製作一個WPF應用程序,使用C++/cli來混淆c#xmal。我有一個接口,我聲明我希望xaml能夠看到用c#編寫的DataContext,但是我在c#接口中聲明的是在我的C++/cli文件中實現的。我試圖找到一種方法來在c#中聲明一個枚舉,然後實際定義它在C++/cli中是什麼,但我遇到了問題。 (無論我宣佈在C#接口需要一個訪問,這可能是問題的一部分)c#到C++/cli枚舉聲明

我迄今試圖在C#接口,

Enum Days { get; } 
在c

然後++/CLI

enum class days { Sun= 0, Mon, ...} 
virtual property System::Enum^ Days 
    { System::Enum^ get() { return days; } } 

但是,在return語句中,它表示「類型名稱是不允許的」。我認爲這是因爲System :: Enum ^應該是來自枚舉的值,而不是創建的枚舉類型本身。是否有某種基類或所有枚舉類型繼承的東西,或者其他任何方式來執行我期望的操作?

+1

C++ 11語言版本也採用了'enum class'。所以你實際上聲明瞭一個非託管的枚舉類型。它不能轉換爲System :: Enum。您必須使用前綴「public」或「private」來說服編譯器說您打算聲明一個託管枚舉。你必須返回一個值,而不是一個類型。既然你似乎想要返回一個類型,很可能你的方法被打破了。您的C#代碼也可以使用枚舉,並將其公開。或者相反。或者,也許你需要兩個組件。 –

+0

我認爲它不起作用。我最終在C#命名空間中定義了枚舉,所以我可以在我的C++/cli中引用它。 –

回答

1

我想找到一種方法來在c#中聲明一個枚舉,然後實際定義它在C++/cli中是什麼。

您不能在一個程序集中聲明一個類型,並在另一個程序集中定義它。它不這樣工作。

你可以在C#中聲明類型爲Enum的屬性,並返回任何枚舉值,這將工作。但是,您需要返回枚舉的值,而不是枚舉類的名稱。

System::Enum^ get() { return days::Monday; } // works 

或者,你可以聲明,你你使用通知枚舉類型的應用程序的其餘屬性。應用程序的其餘部分將使用反射來確定枚舉中的哪些值。

System::Type^ get() { return days::typeid; } // also works.