【问题标题】:How to implement interface of C# use COM of native C++?如何使用原生 C++ 的 COM 实现 C# 的接口?
【发布时间】:2016-12-13 02:33:47
【问题描述】:

我在跨平台使用 .Net Core,包括 windows 和 linux。

我不能使用 ATL。

我嵌入了。 Net core 到我的可执行程序。

我希望将 c++ 类实例指针暴露给 .Net Core(C#),并转换为 C# 的接口。

C++:

class foo : public IDispatch, public IManagedObject, public IInspectable...{} fobj;
extern "C" __declspec(dllexport) foo* WINAPI GetTestObject(){return new foo;}

C#:

[DllImport("foo.dll")]
static extern IntPtr GetTestObject();
[Guid("48DF8E89-57DE-3599-AD7C-B49500EF01C0")]
interface ITest
{
    int func();
}
main(){
    var v = GetTestObject();
    obj = (ITest)Marshal.GetObjectForIUnknown(v);
    obj.func();// exception
    dynamic dobj = Marshal.GetObjectForIUnknown(v);
    dobj.func();// OK, IDispatch::Invoke be called
}

我希望实现C#的接口ITest。

【问题讨论】:

  • 将[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]添加到ITest,ok,调用IDispatch::Invoke。

标签: c# c++ com .net-core


【解决方案1】:

您需要的是Runtime callable wrapper

这是一个How to article,介绍如何创建一个。

【讨论】:

    【解决方案2】:

    [接口类型(ComInterfaceType.InterfaceIsIDispatch)]

    接口测试

    {

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2011-03-03
      • 2011-09-29
      • 1970-01-01
      • 2011-02-26
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多