2013-08-01 111 views
2

我正在將一個託管C++項目轉換爲C#文件。 C++項目包含一個常量C++頭文件,它是項目外的外部依賴項。在C#文件中包含一個C++頭文件

在新創建的C#文件中,有沒有辦法包含這個C++頭文件?我不想在C#文件中重新定義這些常量,因爲客戶端的更改將發生在C++頭文件上。

+0

這可能是不可能的。儘管你可以編寫一個工具來獲取這個頭文件,並在構建C#解決方案時生成所需的C#源文件。 –

+0

我編寫了一個自定義實用程序,通過預生成操作來更新c#文件,以便在C++文件更改爲需要在c#和非託管C++代碼之間共享常量的代碼時進行更新。工作很好。 – pstrjds

+1

@JoachimPileborg:該工具被稱爲SWIG;) –

回答

3

這是不可能包括它。

您有2個選項真的

  • 複製它的管理層,並保持它與C++頭同步。
  • 在運行時讀取並解析它,並在需要這些符號的C#部分中使用反射。

正如其他人所指出的,您可以自動化第一個。

+0

你如何保持它與C++頭同步?手動? –

+1

我可能編寫了一個簡單的工具來讀取頭文件併發出一個包含任何需要的聲明的C#文件。 –

+0

@jay_t - 請參閱David Heffernan的評論 - 完全一樣。 – SteveLove

0

不幸的是,這是不可能的,因爲C#編譯器不知道如何處理.h文件。即使這樣做,在.NET中使用未定義範圍的變量聲明(常量或其他)也是非法的。

您必須手動轉換文件,或者如Joachim Pileborg的評論中所述,構建一個實用程序以將其自動轉換爲C#代碼。