У меня есть кодовая база, которая использует проект C ++ / CLI, который предоставляет классы C ++ для CLR через классы тонкой оболочки. Например…
Код C ++ в проекте C ++
class Foo {
public Foo(bool wat) { /* do the things */ }
};
Код C ++ / CLI в сборке смешанного режима (проект C ++ / CLI)
public ref class ManagedFoo {
Foo * foo;
public:
ManagedFoo (bool wat) { foo = new Foo(wat); }
!ManagedFoo () { delete foo; }
~ManagedFoo () { this->!ManagedFoo (); }
};
Насколько я знаю, сборки в смешанном режиме будут работать только в Windows .NET. Я надеюсь, что мне не нужно пересматривать компоненты и использовать P/Invoke
, который дал бы мне кроссплатформенную поддержку.
Кто-нибудь знает, будет ли .NET Core поддерживать сборки в смешанном режиме? Другие идеи приветствуются.
Неуправляемый код в контексте C ++ / CLI всегда зависит от платформы и компилируется для конкретной ОС (Windows) и конкретной архитектуры ЦП (x86 / x64). Неуправляемый код в C ++ / CLI оказывается во многом похожим на реальный код C ++, скомпилированный с использованием компилятора C ++. Поскольку сборки в смешанном режиме могут содержать собственный код, они привязаны к конкретной архитектуре ОС и ЦП.
Работает ли сборка в смешанном режиме с .NET Core, не определяется кодом конкретной платформы. Поддержка сборок в смешанном режиме работает в:
https://github.com/dotnet/coreclr/issues/18013
Насколько я понимаю, это потребует перекомпиляции проектов C ++ / CLI для целевой платформы .NET Core.
Конечно, сборка в смешанном режиме с кодом x86 для Windows будет работать только как x86 в Windows и так далее.