2016-08-25 106 views
13

我們的項目結構是這樣,C++/CLI支持在.net核心

native.dll: - 這包含用C \ C++中的純本地代碼。 這個native.dll公開了一些使用* def文件的函數。

Wrapper Library(wrapper.dll compiled with .Net framework v4.0): - 爲了使用的native.dll功能,一個Wrapper lib(wrapper.dll) 使用:clr\oldsyntax寫在C++\CLI。該包裝具有全部 代碼InteroperabilityMarshalling

Application(Console App v4.0)直接使用wrapper.dll使用提供的功能 native.dll

現在這個項目需要運行在.Net Core。這意味着我們將有一個 .Net Core application這將reference wrapper.dll而這又將指 native.dll

我知道這不會直接工作。但是問題是.Net Core(CoreCLR)是否支持 C++ \ CLI(clr \ oldsyntax)運行時環境

如果否,那麼這個應用程序可能的解決方案是什麼?

+1

如果不會間接工作。運行C++/CLI代碼(模塊初始化程序)所需的基本支持在.NETCore中不可用。很少有實際的平臺目標可以執行該本機代碼,「native.dll」通常只能運行在桌面版的Windows上。所以這不是一個真正的問題。 –

+0

@HansPassant: - 你說過「很少有實際的平臺目標可以執行這個本地代碼」,請你詳細說明一下嗎?確實意味着目前沒有辦法運行這些類型的項目。網絡核心? – User1234

+0

爲什麼選擇.NETCore?因爲它在那裏或因爲你必須?你只需要當你希望你的程序在Linux或OSX或移動設備上運行。當然,哪些平臺不能運行該DLL中的代碼。 –

回答

0

如果你想堅持使用C++(即將OO接口暴露給.NET),另一個潛在的解決方案(儘管顯然是一項艱鉅的任務),可能會從單聲道項目中看到CppSharp。它能夠通過自動生成的C#封裝來公開本機C++代碼。它支持Windows,Linux以及OSX。但是,我不知道生成的代碼是否可以編譯爲.NET標準目標(沒有嘗試)。我只能假設它會因爲生成的代碼不使用任何奇特的API(它基本上是互操作和編組代碼);順便說一下,還可以定製生成過程(儘管再一次,可能不是一件容易的事情)。

+0

或嘗試SWIG(http://www.swig.org/)。 SWIG是將用C和C++編寫的程序與各種高級編程語言(包括C#)連接起來的工具。 – Sonic78