1

我正在尝试使用用于序列化的 Boost 库从命令行应用程序序列化一些 EEG 数据,并通过命名管道将该序列化数据发送到在 Visual Studio C++ 2010 中构建的用户界面表单。

从 boost 库教程中,我能够序列化我的数据结构,并且, http://www.boost.org/doc/libs/1_48_0/libs/serialization/doc/tutorial.html#simplecase

从这篇关于 Win32 命名管道的教程中,我可以构建管道并在应用程序之间发送文本。 http://avid-insight.co.uk/joomla/component/k2/item/589-introduction-to-win32-named-pipes-cpp?tmpl=component&print=1

boost 库教程为文本文件序列化:

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之外的其他 boost 命令,因为我一直无法找到替代。

感谢您的时间!真的很感激!

(之前有人问过这个问题:Serialize and send a data structure using Boost?,但有人告诉他不要使用 boost,因为他的简单数据结构 boost 会有太多开销,所以它确实仍然是浮动的。)

4

1 回答 1

0

感谢ForEveR,很简单,不知道怎么错过了!:) 与上面发布的两个教程相关的解决方案:

    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 回答