我發現有一堆項目(SharpDX等)被編譯爲允許CLR「管理」本機代碼,然後直接從例如c#調用本機代碼(C++函數)。託管C++庫,它是如何工作的?
我想弄明白這是如何工作的。如果你們中任何人都知道,這將是很好的。
到目前爲止我所看到的是,我可以將C#項目中的引用添加到「CLR兼容」C++庫中,就像任何其他c#庫(不需要反射)一樣,添加它就像:「using myCppLibrary 「然後調用任何可用的方法。
當我去看剛剛添加的引用中可用的函數時,似乎可以從c#訪問C++庫的標頭(.h)文件中聲明爲PUBLIC的任何東西,因爲它們會自動轉換爲由編譯器編寫的c#代碼。
因此,實際上正在發生的事情是:
我宣佈我的C++庫的公共方法/變量在頭文件(.h)。 我編譯它們檢查CLR管理在庫的屬性選項卡中是否可用。 (我正在使用Visual Studio 2012) 編譯器爲每個包含任何公共方法/屬性的頭文件(.h)生成c#類。
但我不明白的是,當我打電話讓我們說,來自「myCppLibrary」的giveNumber()函數..該函數的執行在哪裏進行?
CLR是否會自動與C++本機代碼進行互通或實際上發生了什麼?
爲什麼downvote?這在技術上是正確的。 – usr
@us我想知道同樣的事情,但是如果我搞砸了,我太尷尬了。如果你可以提供更好的答案,那麼我只需要5-10分鐘的時間就可以看到更好的答案。 – TooTone
我想有人發現cpp.exe可能會將C++編譯爲IL,這是非常不可信的。當我在前一段時間瞭解到這一點時,我也很驚訝。 – usr