2009-08-13 2 views
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-типов?

Edit:

Я попытался с

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

и это работает!

ответ

2

Boost.Interprocess часто предлагает замены для типов STL для использования в общей памяти. std :: string, особенно когда он является членом структуры, не будет доступен из другого процесса. Другие люди также имели such a problem.

+1

Да, посмотреть в этом разделе документации: http://www.boost.org/doc/libs/1_39_0/doc/html/interprocess/allocators_containers.html#interprocess. allocators_containers.containers_explained –

3

Вы должны использовать

typedef boost::interprocess::basic_string<char> shared_string; 
struct MyType 
{ 
    shared_string name; 
    shared_string description; 
} 
Смежные вопросы