2016-07-21 28 views
0

Was wäre der beste Ansatz, um ein C# 2D-Objekt-Array in C++ 2D-Objekt-Array zu konvertieren.Konvertieren von C# -Objekt [,] 2D-Array in C++ 2D-Array

Zum Beispiel habe ich diese C# 2d Objektarray:

var data = new object[1, 5]; 
data[0, 0] = "1"; 
data[0, 1] = 1.1; 
data[0, 2] = DateTime.Now; 
data[0, 3] = true; 
data[0, 4] = null; 

Wie der Prozess der Serialisieren aussehen wird? - wenn möglich

Gibt es irgendwelche gute Ressourcen, die Sie im Zusammenhang mit C# -> C++ Marshalling empfehlen können?

Vielen Dank für Ihre Hilfe.

Antwort

0

Die Rangierung würde aussehen wie

  1. ein 2D-Objekt-Array in C Make ++
  2. Schleife durch alle Indizes in der C# Array und Marschall jedes Objekt in C++ auf seine eigene Weise
  3. Profit

Nativer Code ist knifflig. Sie müssen genau wissen, wie alles gemarshallt werden soll. Und C# versucht nicht wirklich, mit C++ zu interoperieren - es ist für Interop mit COM, .NET und C-ähnlichen Bibliotheken ausgelegt. Es ist Art von möglich, aber Sie wollen wirklich nicht mit C++ direkt von C# interop.

Wenn Sie von .NET nach C++ interoperieren möchten, ist C++/CLI die beste Wahl - dies ermöglicht Ihnen, natives C++ und verwaltetes C++ in einer einzigen verwalteten Assembly zu kombinieren. Es wird aber immer noch eine Menge Arbeit sein. Sofern Sie nicht sehr erfahren in nativem C++ sind, müssen Sie sehr vorsichtig sein, da sich kleine Fehler leicht verbreiten und Ihre Anwendung in unerwarteter Weise brechen können, die sehr schwer zu debuggen ist.

+0

Hallo @Luaan danke für die Antwort. Konvertierung von C# -> C++/CLI erfolgt automatisch, aber zu cli: array. Was ich versuche zu erreichen, ist im Grunde, einen einfachen Wrapper um einen großen Datei-CSV-Parser zu schreiben, den ich in C# geschrieben habe und der in MatLab verwendet wird. Um schmerzhafte langsame Konvertierung von .NET CLI in MatLab-Zellen zu vermeiden, möchte ich versuchen, einen Wrapper in nativem C++ zu schreiben und zu sehen, ob C++ mit MatLab IDX interoperabel ist (um die Zellkonvertierung in MatLab zu vermeiden). :) –

+0

@MarjanNikolovski Ich sage nicht, es ist automatisch - Sie müssen immer noch jedes einzelne Objekt manuell konvertieren. Es ist nur möglich, dass es in C++ * möglich ist, da C++ im Gegensatz zu C# mit C++ - Objekten umgehen kann. Wenn Sie keine C++ - Objekte benötigen, können Sie C# verwenden. Dies scheint jedoch nicht der Fall zu sein. – Luaan