1

シリアル化用の Boost ライブラリを使用してコマンド ライン アプリケーションからいくつかの EEG データをシリアル化し、そのシリアル化されたデータを名前付きパイプを介して Visual Studio C++ 2010 で構築されたユーザー インターフェイス フォームに送信しようとしています。

ブースト ライブラリのチュートリアルから、データ構造をシリアル化することができ ます。

Win32 名前付きパイプに関するこのチュートリアルから、パイプを作成してアプリケーション間でテキストを送信できます。 http://avid-insight.co.uk/joomla/component/k2/item/589-introduction-to-win32-named-pipes-cpp?tmpl=component&print=1

ブースト ライブラリのチュートリアルでは、テキスト ファイルをシリアル化します。

std::ofstream ofs("filename");

// create class instance
const gps_position g(35, 59, 24.567f);

// save data to archive
{
    boost::archive::text_oarchive oa(ofs);
    // write class instance to archive
    oa << g;
    // archive and stream closed when destructors are called
}

名前付きパイプを介してデータ構造を送信するには、何をシリアル化する必要があるか知りたいですか? IOstream c++ ライブラリは、ストリーミングするファイルを常に必要とするようですか? http://www.cplusplus.com/reference/iostream/

ファイルにシリアライズしたくないのですが、何をシリアライズすればよいかわかりません。シリアル化する必要があるものを教えていただければ本当にありがたいです。見つけられなかったので、 boost::archive:: text_oarchive以外に別のブーストコマンドが必要かどうか教えていただければ幸いです。代替。

お時間をいただきありがとうございます!本当にありがたいです!

(この質問は以前に尋ねられました: Serialize and send a data structure using Boost? , しかし、単純なデータ構造のブーストではオーバーヘッドが大きすぎるため、ブーストを使用しないように言われたので、実際にはまだフローティングです.)

4

1 に答える 1

0

ForEveR に感謝します。:) 上記の 2 つのチュートリアルに関連するソリューション:

    const EEG_Info g(35, 59, 24.567f);
std::stringstream MyStringStream ;
boost::archive::text_oarchive oa(MyStringStream);
    // write class instance to archive
    oa << g;
// This call blocks until a client process reads all the data

string strData;
strData = MyStringStream.str(); 


DWORD numBytesWritten = 0;
result = WriteFile(
    pipe, // handle to our outbound pipe
    strData.c_str(), // data to send
    strData.length(), // length of data to send (bytes)
    &numBytesWritten, // will store actual amount of data sent
    NULL // not using overlapped IO
);
于 2012-09-22T10:18:12.873 に答える