簡體   English   中英

跨C / C ++(非托管)和托管C#代碼共享通用定義

[英]Shared common definitions across C/C++ (unmanaged) and managed C# code

我有一組結構定義,由C#托管組件和非托管C / C ++組件使用。 現在,相同的結構定義分別存在於C / C ++和C#代碼中 - 導致重復和相關的混亂。 維護可以從C#和C / C ++使用的單個定義的最佳方法是什么? 謝謝! 阿米特

PS:我是一個C / C ++人,所以如果有一個明顯的方法可以做到這一點,我可能會完全錯過它!

顯然,我對您的項目並不熟悉,但您是否考慮過在C ++ / CLI中為您的庫構建托管橋? 通過“It Just Works”破解C ++ / CLI編譯器為您做的事情,很多時候您將能夠使用本機代碼和來回來編組和共享托管類型。

同樣,我不知道它是否適合你,沒有更多具體細節,但它可能值得研究。

你需要一個IDL( 接口定義語言 )嘗試谷歌搜索:

  1. 協議緩沖區。
  2. ICE(互聯網通信引擎)。
  3. 也許是Microsoft COM?
  4. --edit:新條目 - 看來microsoft有一個IDL編譯器

這一切都取決於你想要什么。 所有上述技術都有IDL元素,並帶有自己的行李。 我個人會保持低級別的C / C ++:D。 所以我會谷歌“Imatix GSL”並使用上面提到的技術來模擬XML中的問題,並用任何編程語言生成數據結構 - 這項技術非常簡單和微妙,需要一個體驗程序員,所以如果它沒有意義你應該堅持使用IDL。

- 編輯:編程技巧 -

如果您願意,可以通過純技術解決問題。 當嚴謹的工程破裂時,就會出現混亂。 如果您決定使用防火牆並將問題封裝到純C / C ++代碼中,您就不必擔心依賴代碼中的接口下降 - 這是因為任何有用的語言都可以與您平台的ABI接口(簡單的C函數:P)。 關鍵不是暴露內部,而是暴露類型的接口,例如表示可以對類型執行的對象和函數的數字句柄。

我曾經想在我的一個C#代碼和C代碼之間難以分離的項目中這樣做。 理想情況下,C#代碼會從C代碼中借用頭文件,但是:

  • 由於C#不支持include,我不知道如何共享結構的定義並將其包含在C#或C / C ++代碼中
  • 無論如何,將我的結構定義放在單獨的標題中並不方便
  • 我不想依賴IDL或自定義“解析C頭並僅提取結構定義”預處理步驟

暫無
暫無

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

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