У меня есть два простых приложения, которые используют общую память от boost_1_55_0
. BoostCreate.exe
создать общую память. BoostOpen.exe
открыть созданную общую память.
Я построил их с VS2008, и они работают на Windows7/8.1, но в Windows XP BoostOpen.exe
не открывается общая память.
Это BoostCreate.exe
код:boost :: interprocess :: managed_shared_memory() open_only не работает на XP
using namespace boost::interprocess;
std::string shMemName("MySharedMem");
managed_shared_memory shMem = managed_shared_memory(create_only, shMemName.c_str(), 1000);
Это BoostOpen.exe
код:
using namespace boost::interprocess;
std::string shMemName("MySharedMem");
try
{
managed_shared_memory shMem = managed_shared_memory(open_only, shMemName.c_str());
}
catch(boost::interprocess::interprocess_exception& e)
{
printf("Error opening %s\n", e.what());
}
Исключение составляет: The system cannot find the file specified
.
Попытка boost_1_59_0
я получаю некоторые ошибки компоновщика:
error LNK2001: unresolved external symbol "public: void __thiscall boost::container::container_detail::has_member_function_named_construct<class boost::container::new_allocator<char> >::BaseMixin::construct(void)" ([email protected]@[email protected][email protected]@[email protected]@@@[email protected]@[email protected]@QAEXXZ)
ошибка линкера можно обойти путем создания отладки сборки, или отключить оптимизацию, она появляется. Попробуйте, чтобы узнать, что такое поведение в Boost 1_59: – sehe
Вы используете клиент в том же [сеансе] (http://blogs.technet.com/b/askperf/archive/2007/07/24/sessions-desktops- and-windows-station.aspx)? Разрешения и пространство имен могут привести к тому, что карта будет невидимой/недоступной. – sehe
Да, используя собственные Win32 'CreateFileMapping' и' OpenFileMapping', я могу создать и открыть одну и ту же разделяемую память. К сожалению, здесь я использую 'managed_shared_memory ;; конструкцию', и для этого потребуется переписать много кода для использования собственного API. –