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

C++ copy structure to the resource of another program

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

源程序:

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

感谢您的宝贵时间。

首先,我不建议对生产代码这样做。请使用适当的数据共享机制。您现在可以通过使用纯 char array 给定编译时已知的大小来解决此问题,而不是 std::string ,后者可能会在头部为长字符串分配内存。

,为了< 8你体验了所谓的std::string的SSO(Small String Optimization)。许多 std::string 实施现在确实有这种优化。该值不会始终为 8。

Third,对于 > 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