Я использую .Net Core в кроссплатформенности, включая Windows и Linux.
Я не могу использовать ATL.
Я вставляю Сетевое ядро для моей исполняемой программы.
Я надеюсь выставить указатель экземпляра класса c ++ на .Net Core (C #) и преобразовать в интерфейс C #.
class foo : public IDispatch, public IManagedObject, public IInspectable...{} fobj;
extern "C" __declspec(dllexport) foo* WINAPI GetTestObject(){return new foo;}
[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 #.
То, что вам нужно, называется Вызываемая оболочка во время выполнения.
Вот Как оформить статью о том, как его создать.
Тест интерфейса
{
}