2010-05-20 43 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

相关问题