Как реализовать интерфейс C # с использованием COM нативного C ++?

Я использую .Net Core в кроссплатформенности, включая Windows и Linux.

Я не могу использовать ATL.

Я вставляю Сетевое ядро ​​для моей исполняемой программы.

Я надеюсь выставить указатель экземпляра класса 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
}

Я надеюсь реализовать интерфейс ITest из C #.

0

Решение

То, что вам нужно, называется Вызываемая оболочка во время выполнения.

Вот Как оформить статью о том, как его создать.

1

Другие решения

[InterfaceType (ComInterfaceType.InterfaceIsIDispatch)]

Тест интерфейса

{

}

0