2010-05-20 35 views

回答

4

爲了補充這裏的其他答案,這裏是描述你的場景的MS支持文章。

http://support.microsoft.com/kb/828736

+0

+1:非常棒的google-fu!這個鏈接正是馬修所需要的。 – 2010-05-20 12:44:36

+0

@Binary Worrier - 我擔心我會踩着你的腳趾,上面的鏈接,因爲它看起來像你要編輯你的答案。 – 2010-05-20 12:49:25

+0

榮譽夥計,最快的手指贏了:) – 2010-05-20 13:07:50

1

您可以使C#程序集對COM可見,並以此方式使用它。

在C#項目屬性的「Assembly Information」按鈕下,選擇「Make COM Visible」。

有很多方法可以從Native C++訪問COM對象,最簡單/最好的方法取決於你在做什麼和如何做。

+0

+1 - 這幾乎是它。 COM interop幾乎是這種情況下唯一明智的方式。 – TomTom 2010-05-20 12:42:06

+1

-1,沒有評論。 。 。怎麼會這樣?如果我的答案有問題,請你讓我知道嗎?我們都在這裏學習,謝謝。 – 2010-05-20 12:45:57

+0

感謝您的回覆,我將使用這種方法。 :) – 2010-05-20 14:09:15

3

有不僅僅是COM互操作越多,MSDN FAQ還列出了鮮爲人知的方法:

2.2如何調用來自本機的Visual C .NET程序集++?

基本上有四種方法可以從本地VC++ 代碼調用.NET程序集中的 。微軟All-In-One Code Framework有 演示方法的工作示例。

  1. 本地VC++模塊調用CLR Hosting APIs到主機CLR,負載和 調用.NET組件。 (多功能一個 代碼框架中的示例代碼: CppHostCLR)

  2. 如果.NET組件可以公開爲一個COM組件,天然 VC++模塊可以通過.NET調用到.NET 總成 - COM互操作。 (多功能一站式示例代碼庫示例 代碼:CppCOMClient)

  3. 反向的PInvoke:託管代碼調用本地傳遞一個委託 本地代碼可以回調。 (全多功能一體機代碼框架示例 代碼:CSPInvokeDll)

  4. 如果包含天然VC++代碼模塊被允許enable CLR,天然VC++代碼可以調用 .NET組件可直接通過「它 只是作品「或」IJW「機制。 (多功能一站式示例代碼庫示例代碼:CppCLIWrapLib)

3

嗯,看來我不得不再次提到我unmanaged exports。 ;-)

剛剛在2天前回答了similar question。這完全工作在C#中,它甚至爲你的C#程序集創建的.lib &文件.exp由C++消耗:

internal class Sample 
{ 
    [DllExport("_export_test", CallingConvention.Cdecl)] 
    static int Test(int a) 
    { 
    return a + 1; 
    } 
} 
+0

哇!真?我假設C#需要被標記爲不安全?我沒有想到你可以做到這一點。 – 2010-05-21 12:18:14

+0

該程序集將包含不安全的位,但在用作.Net程序集時不會被認爲是不安全的。您仍然可以將它用作普通的x86或x64(不是AnyCPU)程序集,幷包含所有類和東西。但是,如果將它作爲真正的DLL加載,它將表現得像一個一樣。這是不安全位開始的地方。 – 2010-05-21 13:56:46

相關問題