读书人

两个历程共享string

发布时间: 2013-07-04 11:45:51 作者: rapoo

两个进程共享string
我尝试用CreateFileMapping、MapViewOfFile来做,但另一个进程就是读取不出来string。


string str("测试string测试string测试string测试string测试string测试string测试string");
int datasize = sizeof(str);
HANDLE hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, datasize, L"courseinfo");
if (!hMap)
{
int a = 1;
}
string* pBuf = (string*)::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
*pBuf = str;

FlushViewOfFile(pBuf, datasize);

这只是第一个进程的部分代码,求教两个进程间如何共享两个字符串,谢谢。
[解决办法]
std::string不能这么扔过去,std::string是个C++类型,它的成员变量肯定有一个指针指向一个字符缓冲区,那里面才存放这真正的字符串。
如果你将一个std::string扔进内存映射文件,就只是将std::string的所有成员变量扔进去(包括那个指针),
而对方取出来一个,也同样得到该指针,但是该指针是指向原进程的字符缓冲区的,这个地址在目标进程是非法(指向的地方可能不是字符串),因此目标进程获取不到在原进程中保存的字符串。

要想将字符串传过去,请退回到C语言,将字符串保存在char数组中,将char数组中内容扔过去。
[解决办法]
char* str("测试string测试string测试string测试string测试string测试string测试string");
这么试试
[解决办法]
*pBuf = str;

改成:
memcpy(pBuf,str.c_str(),str.size());

读书人网 >VC/MFC

热点推荐