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。
我正在尝试复制一个结构以供另一个程序读取。
源程序:
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。