我已经创建了一个Qt共享内存程序来将字符串写入共享内存。现在写完之后,我需要从Boost程序中读取它。我尝试使用简单的程序,但我无法使用Boost进程读取字符串。
这是写入共享内存的Qt代码。我正在仔细检查字符串是否是从同一程序的共享内存中读取的。
void CDialog::loadString()
{
if(sharedMemory.isAttached())
{
if(!sharedMemory.detach())
{
lbl->setText("Unable to detach from Shared Memory");
return;
}
}
lbl->setText("Click on Top Button");
char sString[] = "my string";
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << sString;
int size = buffer.size();
qDebug() << size;
if(!sharedMemory.create(size))
{
lbl->setText("Unable to create shared memory segment");
qDebug() << lbl->text();
}
sharedMemory.lock();
char *to = (char *) sharedMemory.data();
const char *from = buffer.data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();
char * str;
QDataStream in(&buffer);
sharedMemory.lock();
buffer.setData((char *)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
in >> str;
sharedMemory.unlock();
qDebug() << str;
}
我正在使用我在Qt程序中提供的相同密钥从boost读取它。 以下是Boost程序代码 -
int main()
{
boost::interprocess::shared_memory_object shdmem(boost::interprocess::open_only, "Highscore", boost::interprocess::read_only);
boost::interprocess::offset_t size;
if (shdmem.get_size(size))
std::cout << "Shared Mem Size: " << size << std::endl;
boost::interprocess::mapped_region region2(shdmem, boost::interprocess::read_only);
char *i2 = static_cast<char *>(region2.get_address());
std::cout << i2 << std::endl;
return 0;
}
请帮助我阅读Boost程序的共享内存数据。 谢谢。
答案 0 :(得分:0)
来自Qt docs:
警告:QSharedMemory以特定于Qt的方式更改密钥。因此,目前无法将非Qt应用程序的共享内存与QSharedMemory一起使用。
你可能需要在双方都使用Boost。