boost entre processos: tipos de memória compartilhada e STL
-
13-09-2019 - |
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!
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