4

シリアル化されたデータを C++ アプリケーションからテキストとして受信する C# アプリケーションがあります (データは、BOOST ライブラリを使用して C++ でシリアル化されました) 現在、シリアル化されたデータは実際には、同様の .Net Object.In に変換する必要があるオブジェクトです。これを達成するために、C++/CLI コンポーネントを dll として記述し、(シリアライズに使用したのと同じライブラリを使用して) テキスト データをデシリアライズし、それを C# アプリケーションに戻すことができると言われました。C++/CLI でのプログラミングの経験はありませんが、C++ でのプログラミングに問題はありません。しかし、C++/CLI を理解するのが難しいとは思いません。私の質問は、C++/CLI アプリケーションを作成してオブジェクトを C# に戻す方法について理解していないことです。ヒント、チュートリアル、リンクをいただければ幸いです

送信されるオブジェクトを編集すると、C++ で次のようになります。

class person 
{ 
public: 
    person() 
    { 
    } 

    person(int age) : age_(age) 
    { 
    } 

    int age() const 
    { 
        return age_; 
    } 

private: 

    friend class boost::serialization::access; 

    template <typename Archive> 
    void serialize(Archive &ar, const unsigned int version) 
    { 
        ar & age_; 
    } 

    int age_; 
}; 
4

2 に答える 2

1

名前空間 System.Runtime.InteropServices.Marshal を読む必要があります

これは、バイナリデータをマーシャリングする方法に関する優れた記事です-構造体をC#構造体に変換します。 http://www.codeproject.com/Articles/66243/Marshaling-with-C-Chapter-3-Marshaling-Compound-Ty

ここにタイプリファレンスがあります - http://www.codeproject.com/Articles/66244/Marshaling-with-C-Chapter-2-Marshaling-Simple-Type

これはマーシャリングと呼ばれ、C# を使用して構造体または複合型のバイナリ データまたはテキスト データを読み取ります。

ここで考慮すべきいくつかのことは、構造体のパッキングとアライメントです。これらの用語をグーグルで検索すると、非常に役立つ結果が得られます

于 2012-10-18T06:03:19.253 に答える
0

私は間違っているかもしれませんが、プラットフォームや言語に依存しないというのが XML の本質ではありませんか? C# クラスが XML ファイルのデータ構造を反映している限り (つまり、int age_ 変数を持っている場合)、C# で通常の XML ファイル パーサーを使用して逆シリアル化することに問題はありません。XML ファイルが C++ アプリケーションによって作成されたという事実は、手動で作成した場合よりも重要ではありません。

于 2012-10-18T06:43:49.863 に答える