c++ - 读\写 boost::binary_oarchive 到管道

标签 c++ windows visual-studio-2005 boost pipe

我将继续构建两个简单的进程,通过简单的(匿名的)管道将类对象抛给另一个(参见我之前的帖子)。现在我为自己揭示了 boost::serialization(感谢回答的人)并试图通过::WriteFile::ReadFile 使一些类被序列化。那么 - 我做错了什么?


1) 我创建了一些类

 #pragma once
 #include "wtypes.h"
 #include <boost\archive\binary_oarchive.hpp>
 #include <boost\archive\binary_iarchive.hpp>
 #include <boost\serialization\binary_object.hpp>

 class CTextContainer
 {
 friend class boost::serialization::access;
     template<class Archive>
     void serialize(Archive & ar, const unsigned int version)
     {
         ar & m_sText;
         ar & m_dwCRC;
         ar & m_dwSize;
     }

 public:
      CTextContainer() : m_dwCRC(0), m_dwSize(0)
      {
          ZeroMemory(m_sText, sizeof(m_sText));
          m_dwSize = sizeof(*this);
      }
      CTextContainer(LPCTSTR sText) : m_dwCRC(0), m_dwSize(0)
      {
         ZeroMemory(m_sText, sizeof(m_sText));
         wcsncpy_s(m_sText, 1024, sText, wcslen(sText));
         m_dwSize = sizeof(*this);
      }
      virtual ~CTextContainer(){}
      LPTSTR GetText() const{return (LPTSTR) m_sText;}
      protected:
      DWORD m_dwCRC;
      DWORD m_dwSize;
      TCHAR m_sText[1024];
 }; //end of class

2) 现在我正试图从这个类中读入二进制存档并将其内容写入管道的一端......

boost::archive::binary_oarchive oa(ofs);
oa << tc;
::WriteFile(hPipe, &oa, dwRead, &dwWritten, NULL) == FALSE 

那样做是不行的吧?那么,它会如何呢?

3) 另一边同样的操作?

最佳答案

我认为这里的问题是您试图在 WriteFile 函数中传递一个指向存档对象的指针。相反,您应该做的是提供一个指向序列化数据的指针。

std::stringstream ss;
boost::archive::binary_oarchive oa(ss);
oa << tc;
::WriteFile(hPipe, ss.str().data(), ss.str().data().size(), &dwWritten, NULL)

作为更好的替代方案,您应该为 binary_oarchive 构造函数提供直接写入文件句柄的 ostream 实现。

关于c++ - 读\写 boost::binary_oarchive 到管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/393241/

相关文章:

c++ - 查找非虚拟析构函数的工具

c++ - 更新 : C++ Pointer Snippet

c++ - 查找目录中所有 .cpp .h 文件的常规方法(include、src 等...)

c# - 如何将挂载点的 Volume GUID 转换为实际路径?

asp.net - 运行 asp.net 项目时,我得到 : Internet Explorer cannot display the webpage

visual-studio-2005 - SSIS 2005 更改 "Execute SQL Task"的连接服务器无效-

c++ - 屏幕截图而不是 OpenGL 中的输出

windows - 在没有 WNetAddConnection2 的情况下使用 Delphi 映射网络驱动器

python - Windows 上的 django-admin.py 和 virtualenv 问题

c++ - 音频设备输入名称被截断