Я пытаюсь сериализовать некоторые данные ЭЭГ из приложения командной строки, используя библиотеку Boost для сериализации, и отправляю эти сериализованные данные через именованный канал в форму пользовательского интерфейса, встроенную в Visual Studio C ++ 2010.
Из руководства по повышению библиотеки я могу сериализовать мою структуру данных, и, 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&печать = 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, кроме boost :: archive ::text_oarchive , так как я не смог найти альтернативу.
Спасибо за ваше время! Это действительно ценится!
(Этот вопрос задавался ранее: Сериализовать и отправить структуру данных с помощью Boost? , но человеку сказали не использовать повышение, так как из-за его простой структуры данных было бы слишком много накладных расходов, так что это действительно все еще плавно.)
Спасибо 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
);
Других решений пока нет …