如何使用本机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)]
界面测试
{
}
我在跨平台中使用 .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)]
界面测试
{
}