如何使用本机C++的COM实现C#的接口?

How to implement interface of C# use COM of native C++?

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

我不会使用 ATL。

我嵌入了。我的可执行程序的网络核心。

我希望将c++ class实例指针暴露给.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接口

你需要的是 Runtime callable wrapper.

这里是How to article如何创建一个。

[接口类型(ComInterfaceType.InterfaceIsIDispatch)]

界面测试

{

}