簡體   English   中英

從C#訪問C ++類枚舉值

[英]Accessing C++ class enum values from C#

我正在嘗試從C#訪問C ++類頭(.h)中的枚舉。 有一個簡單的方法嗎? 我見過的每個示例都涉及將類編譯成.dll,對於該示例而言,這是一種浪費,因為此類的功能非常有限。

根據要求編輯:可以修改C ​​++庫。 實際上,C ++庫是項目(固件)的主要組成部分,是由我團隊的其他成員開發的,C#(我的部分)僅用於單元測試。

實際上,您有三個選擇:

  1. 創建一個粘合庫,該粘合庫導出包含此頭的C函數( extern "C" )並返回您感興趣的枚舉值,然后從C#中P /調用此庫。
  2. 將值硬編碼在C#代碼中。
  3. 編寫C ++解析器,然后以這種方式提取值。 (最好是使用完整的C ++解析器,或者您可以懶惰地編寫一個簡單的regex解析器,該解析器可以在此特定版本的C ++頭文件上使用,但是如果代碼以您未使用的方式更改,將來可能會中斷沒想到。)

為了訪問C ++枚舉,您必須將C ++類轉換為.NET可以識別的內容,這意味着將其編譯為C ++ / CLI(如果可以選擇)或轉換為.NET互操作性可以的DLL。訪問。

好吧,這讓CS預編譯器有些吃驚,但它建立了:

#if CSHARP

namespace Test
{
    public enum SharedEnum

#endif //CSHARP

#if CPP
    typedef enum SharedEnum 
#endif //CPP
    {
        One,
        Two,
        Three
    }
#if CPP
    SharedEnum 
#endif //CPP
    ;
#if CSHARP
};
#endif

只需將條件編譯符號CSHARP添加到您的C#項目中,將現有的.cs文件和預處理器定義CPP到您的C ++項目中。

(由於具有相同的想法而致謝Yakk)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM