c# - 如何使用 native C++的COM实现C#的接口(interface)?

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

我在跨平台(包括 Windows 和 Linux)中使用 .Net Core。

我不会使用 ATL。

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

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

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接口(interface)。

最佳答案

你需要的是一个Runtime callable wrapper .

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

关于c# - 如何使用 native C++的COM实现C#的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41112897/

相关文章:

c# - LINQ to Entities 无法识别方法 'System.String ToString()' 方法并且此方法无法转换为存储表达式

C++ 为什么基类/结构构造函数不能有多个参数可以从派生隐式调用?

c++ - zwave/cpp - 从恒温器获取值(温度和湿度)

c++ - qt 错误 : undefined reference to `vtable for Thread'

c++ - 调试 InProc COM Dll

c# - 空合并运算符怎么可能导致错误?

c# - 在 try finally block 中记录异常详细信息

c# - 是否有任何库可以将带有引用的 C# 对象转换为 dojox.json.ref 兼容的 JSON?

vba - Err.Raise 的 COM 错误号在哪里注册?

visual-c++ - 为什么 ATL COM map 扫描代码期望第一个条目是 _ATL_SIMPLEMAPENTRY 类型?