2011-09-27 62 views
1

我想讀取C#中的常量,這些常量在C++的.h文件中定義。任何人都可以告訴我如何在C#中執行此操作?在C++的.h文件看起來像:如何從C#中的.h文件讀取常量

#define MYSTRING1 "6.9.24 (32 bit)" 
#define MYSTRING2 "6.8.24 (32 bit)" 

我想在C#閱讀本?

+0

您需要在StreamReader中打開文件並讀取每一行。 –

+0

可能的重複:http://stackoverflow.com/questions/100854/reuse-define-statement-from-h-file-in-c-code – Nahum

+0

不,我不想逐行讀取它。我想獲得在我的C#變量中定義在.h文件中的所有常量。 –

回答

1

下面是一個非常簡單的答案,您可以在.h文件的每一行上使用它來提取字符串值。

string GetConstVal(string line) 
{ 
    string[] lineParts = string.Split(line, ' '); 
    if (lineParts[0] == "#define") 
    { 
    return lineParts[2]; 
    } 
    return null; 
} 

所以任何時候它返回null,你沒有一個常量。現在請記住,它只是獲取常數的值,而不是名稱,但是您可以輕鬆修改代碼以通過輸出參數等返回該代碼。

如果要表示其他數據類型,像整數等等,你將不得不考慮巧妙的事情,因爲C++中的宏並不真正算作類型安全。

+0

我讀了可以隨時更改的常量,意思是有名字等等......我只想得到一些特定的常量......在您提出的解決方案中,如果常量名稱發生了變化,那麼如何才能得到它? –

+0

列出的代碼根本不考慮名稱。另外,如果你正在尋找一個特定的常量,並且它的名字發生了變化,那麼你不能做任何事情。無論人類改變常數的名稱也必須改變他們正在尋找的東西。 –

1

你有兩個選擇:

1 - 創建一個C++包裝代碼,它封裝這些宏,出口這個代碼到一個lib或DLL和C#中使用它。

2-從代碼中讀取/解析.h文件,並在運行時獲取這些值。

+0

請告訴我這個Wrapper類的目的是什麼,我如何使用它和它的功能?我對這個解決方案感興趣。 –

+0

@AsadIqbal - 你不需要知道做第一個選項做第二個選擇。 –