我在跨平台(包括 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/