3

我有一个简单的结构:

struct MyType
{
    std::string name;
    std::string description;
}

我把它放在共享内存中:

managed_shared_memory sharedMemory(open_or_create, "name", 65535);
MyType* pType = sharedMemory.construct<MyType>("myType")();
// ... setting pType members ...

如果与共享内存通信的两个应用程序是使用不同版本的 Visual Studio(不同版本的 stl 实现)构建的,我应该将本机类型(例如 char*)而不是 stl 类型放在共享内存中吗?

编辑

我试过了

typedef boost::interprocess::basic_string<char> shared_string;

它有效!

4

2 回答 2

3

你应该使用

typedef boost::interprocess::basic_string<char> shared_string;
struct MyType
{
    shared_string name;
    shared_string description;
}
于 2009-08-13T14:56:03.203 回答
2

Boost.Interprocess 通常提供 STL 类型的替代品,用于共享内存。std::string,特别是当只是一个结构的成员时,将无法从另一个进程访问。其他人也有这样的问题

于 2009-08-13T13:55:37.633 回答