C ++复制结构到另一个程序的资源

时间:2018-09-09 09:20:29

标签: c++ struct resources

我正在尝试复制一个结构,以供另一个程序读取。

源程序:

        struct datas{               
            std::string key;
        };

        datas mystructure = datas();
        std::string mychar = "mychar";// if length of char > 8, it doesn't get copied.

        mystructure.key = mychar;

        WriteToResources(param, 0, (BYTE*)&mystructure, sizeof(mystructure));

目的地程序:

struct datas{               
            std::string key;
        };

datas mystructure;
memcpy(&mystructure, pbindata, rsrcsize);

std::cout << (char*)mystructure.key.c_str();

当mychar的长度为<= 8时,它将被复制到资源并由目标程序很好地读取。 但是,如果mychar的长度大于8,则不会复制任何内容。

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

首先,我不建议对生产代码执行此操作。请使用适当的数据共享机制。您可以通过使用普通的char array来解决此问题,而使用普通的std::string而不是< 8可以在长时为长字符串分配内存。

第二,对于std::string,您会体验> 8中所谓的SSO(result in console)。许多std :: string实现现在确实进行了此优化。此值将不会始终为8。

第三,对于{{1}},您的结构副本中仅包含元数据(大小,容量,指向堆数据的指针)。所有数据都位于堆中。 Small String Optimization此框架实现。

已编辑:也请阅读Read

数据共享:读取this post

  1. this post
  2. https://docs.microsoft.com/en-us/windows/desktop/Memory/creating-named-shared-memory