2017-07-07 11 views
-1

C#のflatbuffersでオブジェクトをネイティブ(アンマネージド)メモリバッファにシリアル化できますか? だから私はこれらの手順をしたい:フラットバッファを使用してC#からネイティブメモリバッファにシリアライズ

  1. は、デシリアライゼーション
  2. のためにC++にこのメモリバッファを送るC#でオブジェクトを作成し、割り当てられたバッファ
  3. にそれらをシリアライズ
  4. ネイティブメモリからネイティブメモリバッファを割り当て

C#のカスタムメモリバッファアロケータ、またはC#のメモリバッファの所有権をC++に転送する方法のいずれかを考えています。

一般に、私はC#からC++にデータを送信する際にメモリをコピーしないようにしたいと思います。このメモリバッファをC#とC++の間で共有します。

どうすればよいですか?

+0

誰でもdownvotesとクローズ票を説明できますか? – Max

+0

あなたはc#メモリをピンし、そのアドレスをC関数に渡すことができます。https://stackoverflow.com/questions/5143349/c-sharp-how-can-i-pin-an-object-in-memory-without-marshalling-オブジェクトとここhttps://manski.net/2012/06/pinvoke-tutorial-pinning-part-4/ – pm100

答えて

0

はありません、現在のFlatBuffersの実装では、ハードコーディングされた定期的なバイト配列に書き込むことです。後でこの配列をネイティブメモリにコピーするか、@ pm100のようにピンで固定します。

FlatBuffersでのすべてのシリアル化は、ByteBufferという抽象化を経ているため、ネイティブメモリの実装を比較的簡単に直接行うことができます。

0

はい、C++/CLIを使用している場合。 bool、32ビットint、shortなどの基本データ型は同じです。他のタイプについては、msclr :: interop :: marshal_as <>を参照してください。

同様のポスト:C++/CLI Converting from System::String^ to std::string

+0

ありがとう、これは私が求めているものではありません。私の質問はflatbuffersライブラリと通常のC++を使用することです。マーシャリングはメモリコピーを行います。これはまさに私が避けたいものです。 – Max

関連する問題