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 ...

共有メモリと通信する2つのアプリケーションが異なるバージョンのVisualStudio(異なるバージョンのstl実装)を使用して構築されている場合、stlタイプの代わりにネイティブタイプ(char *など)を共有メモリに配置する必要がありますか?

編集

で試してみました

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 に答える