2017-07-07 1 views
-1

Ist es mit flatbuffers in C# möglich, Objekte in nativen (nicht verwalteten) Puffer zu serialisieren? Deshalb möchte ich diese Schritte tun:Serialize in nativen Speicherpuffer von C# mit Flatbuffers

  1. Vergeben Sie einen nativen Speicherpuffer aus nativen Speicher
  2. Objekte in C# erstellen und sie in den Puffer zugeordnet serialisiert
  3. Senden Sie dieses Speicherpuffer zu C++ für die Deserialisierung

Ich denke entweder über einen benutzerdefinierten Speicherpufferzuordner in C# oder über eine Möglichkeit, den Besitz eines Speicherpuffers von C# auf C++ zu übertragen.

Im Allgemeinen möchte ich Speicher beim Kopieren von Daten von C# nach C++ kopieren und umgekehrt. Ich möchte diesen Speicherpuffer zwischen C# und C++ teilen.

Wie mache ich das?

+0

Kann jemand Downvotes erklären und Stimmen schließen? – Max

+0

können Sie C# Speicher anheften und seine Adresse an eine C-Funktion übergeben https://stackoverflow.com/questions/5143349/c-sharp-how-can-i-pin-an-object-in-memory-witound-marshalling- the-object und hier https://manski.net/2012/06/pinvoke-tutorial-pinning-part-4/ – pm100

Antwort

0

Nein, die aktuelle FlatBuffers Implementierung ist hart codiert in einem regulären Byte-Array zu schreiben. Sie können dieses Array anschließend in den nativen Speicher kopieren, oder wie @pm100 sagt, stecken Sie es fest.

Alle Serialisierung in FlatBuffers durchläuft eine Abstraktion namens ByteBuffer, also wenn Sie eine Implementierung für native Speicher gemacht, könnte es direkt relativ einfach verwendet werden.

0

Ja, wenn Sie C++/CLI verwenden. Grundlegende Datentypen wie bool, 32-Bit int, short usw. sind gleich. Für andere Typen überprüfen Sie es msclr :: interop :: marshal_as <>.

ähnlicher Beitrag: C++/CLI Converting from System::String^ to std::string

+0

Danke, aber das ist nicht das, was ich frage. Meine Frage bezieht sich auf die Verwendung der flatbuffers-Bibliothek und auf normales C++. Und Marshalling macht Speicherkopie, was genau das ist, was ich vermeiden möchte. – Max

Verwandte Themen