webentwicklung-frage-antwort-db.com.de

C++/CLI-Unterstützung in .NET Core

Unsere Projektstruktur ist wie 

native.dll: - Dies enthält reinen nativen Code, der in c\c ++ ..__ geschrieben ist. Diese native.dll macht einige Funktionen mit der * def-Datei verfügbar.

Wrapper Library(wrapper.dll compiled with .Net framework v4.0): - Um die Funktionalität von native.dll zu verwenden, wird eine Wrapper lib(wrapper.dll) mit C++\CLI in :clr\oldsyntax geschrieben. Dieser Wrapper enthält den gesamten Code von Interoperability und Marshalling.

Application(Console App v4.0) verwendet wrapper.dll direkt zur Verwendung der bereitgestellten Funktionenby native.dll

Nun muss dieses Projekt in .Net Core laufen. Dies bedeutet, dass wir eine .Net Core application haben, die reference wrapper.dll wird, die wiederum auf native.dll verweist.

Ich weiß, dass dies nicht direkt funktionieren wird. Aber das Problem ist ob .Net Core (CoreCLR) C++\CLI (clr\oldsyntax) Laufzeitumgebung unterstützt?

Wenn nein, was können die möglichen Lösungen für diese Anwendung sein?

18
User1234

ob .Net Core (CoreCLR) die Laufzeitumgebung C++\CLI (clr\oldsyntax) unterstützt?

Soweit ich weiß, gibt es keinen Plan, C++/CLI mit .NET Core zu unterstützen.

Wenn nein, was können die möglichen Lösungen für diese Anwendung sein?

Sie können (sollte) eine C-API bereitstellen. Mono e. G. unterstützt P/Invoke und .NET Core unterstützt auch P/Invoke (siehe auch diese Stack-Überlauffrage und dieses DllMap-bezogene Ticket ).

8
Sonic78

Das .net-Kernteam verpflichtet sich (jetzt?) nur zur Unterstützung von C++/CLI für Windows .

Es sollte für .net Core 3.0 ausgeliefert werden. Obwohl ich in den Versionshinweisen noch keine explizite Erwähnung gefunden habe, war die C++/CLI-Unterstützung eine Voraussetzung für die Bereitstellung von WPF (nur Windows), das jetzt in .net Core 3.0 unterstützt wird.

nterstützung für Assemblys im gemischten Modus unter Windows - # 1801

In diesem Problem (Nr. 18013) werden die Fortschritte beim Laden und Ausführen von Assemblys im gemischten Modus in CoreCLR verfolgt. Das Hauptziel ist die Unterstützung von WPF und anderem vorhandenen C++/CLI-Code unter .NET Core. Ein Teil der Arbeit wird von Aktualisierungen des MSVC-Compilers abhängen.

Das oben erwähnte Github-Problem (# 659) von @ Tomas-Kubes , nterstützt CoreCLR C++/CLI crossplat ? - # 659 handelt von plattformübergreifendem C++/CLI.

Übrigens erhalte ich Compiler-Warnungen zu "clr\oldsyntax" mit VS2017/.net-4.7. Daher ist dieses Compiler-Flag bereits veraltet.

UPDATE: Dies kommt nicht vor .Net Core 3.1

4
Hezi

Eine andere mögliche Lösung (wenn auch offensichtlich eine schwierige Aufgabe), wenn Sie bei C++ bleiben möchten (d. H. Eine OO - Schnittstelle für .NET verfügbar machen), könnte ein Blick auf CppSharp aus dem Monoprojekt werfen. Es ist in der Lage, nativen C++ - Code über einen automatisch generierten C #-Wrapper verfügbar zu machen. Es unterstützt Windows, Linux sowie OSX. Ich weiß jedoch nicht, ob der generierte Code zu einem .NET-Standardziel kompiliert werden kann (habe es nicht versucht). Ich kann nur annehmen, dass dies der Fall wäre, weil der generierte Code keine ausgefallene API verwendet (es handelt sich im Wesentlichen um Interop- und Marshalling-Code). Im Übrigen ist es auch möglich, den Generierungsprozess anzupassen (obwohl dies wiederum wahrscheinlich keine einfache Aufgabe ist).

1
odalet