2011-05-23 128 views
1

我正在開發一個託管庫(使用Microsoft Web服務),我將其包括到一個C++項目中。該項目不使用/clr選項, ,所以當我包括我的圖書館的頭文件VS2005顯示我的錯誤 說我必須使用/clr選項。這樣做我有一個不兼容 與/EHs命令行選項(錯誤D8016),但從EHs更改爲 沒有異常處理不解決問題,並繼續顯示我相同的錯誤。本地C++編寫C#託管代碼

任何建議是值得歡迎的。

預先感謝您。

+7

您不能在同一個項目中編寫C#和C++代碼。 – 2011-05-23 10:31:43

+3

如果不使用'/ clr'選項,則無法創建託管庫。 – Gabe 2011-05-23 10:35:41

+0

@CodyGray:是的,你可以;閱讀[.netmodule](http://msdn.microsoft.com/en-us/library/k669k83h.aspx)文件。 – ildjarn 2011-05-23 15:01:22

回答

1

您不能使用非託管C++應用程序中的託管庫。由於您添加了/ clr選項,因此您的C++應用程序也會受到管理(僅用於記錄:))

以下是可能對您有幫助的信息:http://msdn.microsoft.com/en-us/library/ffkc918h.aspx -/clr選項的限制。

+0

幾乎正確:要從非託管代碼使用託管庫,您需要創建包裝庫或以其他方式導出非託管符號。 – 2011-05-23 11:08:12

+0

不,它不會工作,在那個鏈接它告訴達笏是事物clr不可編輯的,我想解決這個錯誤,沒有解決方案,直到找到指定的鏈接:( – user765829 2011-05-23 11:13:33

0

可以編寫託管C++適配器,它將調用C#庫,並從非託管C++程序調用此適配器,就像您通常調用普通的C++庫一樣。如果出於任何原因想要保持它不被管理,你將使用/ clr和你的主要C++程序編譯你的適配器庫。

4

如果有非託管C++代碼,並希望使用託管代碼,您有幾種選擇:

  • 更改您的非託管代碼,C++/CLI,通過使用/clr開關。
  • 編寫一個C++/CLI包裝庫。它可以DLL導出在非託管代碼中調用的非託管函數。
  • 跳過包裝庫並直接通過this library DLL導出非託管功能。
0

您可以嵌入單聲道環境並啓動AppDomain。 mono的運行時API將允許您實例化類並調用它們的成員。這將是笨拙,但將努力

http://www.mono-project.com/Embedding_Mono

注意,Mono是一個完整的.NET 4.0兼容的CLR,它可以在Windows上使用微軟的核心庫工作。

在Windows和Unix上,它可以與Mono corlib/class庫一起工作。 Mono中沒有覆蓋的區域,但它們看起來很稀疏。您可以使用MoMa工具來確定您的應用程序是否使用不兼容/不完整的API。

或者你可以使用微軟的.NET框架,假設你在Windows上!