【发布时间】: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。