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

问题描述 投票:1回答:1

我正在尝试复制另一个程序要读取的结构。

来源计划:

        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,则不会复制任何内容。

感谢您的时间。

c++ struct resources
1个回答
1
投票

首先,我不建议为生产代码执行此操作。请使用适当的数据共享机制。你现在可以通过使用普通的char array解决这个问题,考虑到编译时已知的大小而不是std::string,它可能会为长字符串在头部分配内存。

第二,对于< 8,你会遇到所谓的Small String Optimization的SSO(std::string)。许多std :: string实现现在都有这种优化。此值不会始终为8。

第三,对于> 8,您只有结构副本中的元数据(大小,容量,指向堆数据的指针)。所有数据都在堆中。 Read这个骨架实现。

编辑:阅读this post

数据共享:阅读this post

  1. https://docs.microsoft.com/en-us/windows/desktop/Memory/creating-named-shared-memory
  2. https://www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html
© www.soinside.com 2019 - 2024. All rights reserved.