Pergunta

Eu tenho uma estrutura simples:

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

e eu estou colocando-o em uma memória compartilhada:

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

Se os dois aplicativos que se comunicam com a memória compartilhada são construídos usando versão diferente do Visual Studio (versão diferente da implementação STL) devo colocar tipos nativos na memória compartilhada (por exemplo, char *) em vez de tipos de STL?

Editar :

Eu tentei com

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

e funciona!

Foi útil?

Solução

Boost.Interprocess muitas vezes oferece substitutos para os tipos de STL, para uso em memória compartilhada. std :: string, especialmente quando apenas um membro de um struct, não será acessível a partir de outro processo. Outras pessoas também tiveram como um problema .

Outras dicas

Você deve usar

typedef boost::interprocess::basic_string<char> shared_string;
struct MyType
{
    shared_string name;
    shared_string description;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top