2011-07-20 156 views
1

是否有任何方法可以製作包裝器clr:對於C++中的項目非託管是否安全? 「男孩,你必須做一個'C#COM Interop'項目,但是這個必須使用'C++庫',並且必須導致只有'一個'(dll COM) 「。
好吧,經過幾天的搜索,我意識到可以通過兩種方式使用C++庫:添加資源並使用PInvoke進行調用或創建包裝器C++/CLI。用PInvoke我不能只有一個DLL(對吧?)。所以我選擇了第二個選項「包裝C++/CLI」。一開始似乎很容易,我重新編譯Visual Studio 2005到2010的庫,創建一個CLR項目(用keypair.snk並重新簽名)添加庫。作品! \ 0 /現在我將使用ILMerge,ohhhoo這是什麼?只有clr:安全?爲什麼?好的,我嘗試重新編譯C++/CLI到clr:安全但出現錯誤...C++/CLI中的包裝器C++ clr:C#中的安全COM Interop

我該如何解決這個問題?

先進感謝,

+0

我不確定這與COM有什麼關係。有三種互操作:P/Invoke; C++ interop(代號「It Just Works」); COM互操作。既然你沒有告訴我們出現了什麼錯誤,我們無法幫助解決它們。 –

+0

[如何將C#和C++程序集鏈接到單個可執行文件?](http://stackoverflow.com/questions/2609056/how-to-link-c-and-c-assemblies-into-a-single -executable) –

+0

@ Ben Voigt。該錯誤就像「錯誤C4956:'常量wchar_t *':這種類型是無法驗證的......」經過多次搜索後,我意識到將非託管代碼合併到託管代碼是不可能的。 我會試試這個「http://codeblog.larsholm.net/2011/06/embed-dlls-easily-in-a-net-assembly/」。如果不可能,我會在dll中添加資源並使用P/Invoke。謝謝 – Cobaia

回答

0

ILMerge不是正確的工具。

而是將C#編譯爲.netmodule,並將其傳遞給C++/CLI鏈接器以及所有C++/CLI對象文件。

+0

對不起,我無法理解你的答案。我有他們的COM C#,這種使用(C#lib使用C++/CLI clr不安全)。我想部署在一個單一的DLL。謝謝 – Cobaia

+0

@Cabaia:看看http://stackoverflow.com/questions/2609056/how-to-link-c-and-c-assemblies-into-a-single-executable –

+0

謝謝。我試圖「嵌入非託管的DLL作爲資源,如果你將它自己提取到臨時目錄」http://stackoverflow.com/questions/666799/embedding-unmanaged-dll-into-a-managed-c-dll和工作!但我不能使用GetManifestResourceStream :(所以我使用了Properties.Resources.UnmanagedDLL。 – Cobaia