VC++ 关于共享内存进程间通信的问题
小弟今日写一程序,要利用共享内存进行进程间通信,发送和接收程序都由VC6.0编写时非常顺利,但我现在的需求是发送方为VS2008,接收方是VC6.0,同样的程序在接收时只...
小弟今日写一程序,要利用共享内存进行进程间通信,发送和接收程序都由VC6.0编写时非常顺利,但我现在的需求是发送方为VS2008,接收方是VC6.0,同样的程序在接收时只收到字符串首字母。不知如何解决,请各位高手指点迷津! 以下贴出大致程序
接收端:(VC6.0)
OnInitDialog()
...
ShareMemory=CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,10000,"Mem File");
address=MapViewOfFile(ShareMemory,FILE_MAP_WRITE,0,0,0);
...
OnReceive()
{
CString str
strcpy((char*)(LPCTSTR)str,(char*)address);
m_receive.SetWindowsText(str);
}
发送端:(VS2008)
OnInitDialog()
...
CString text;
text="Mem File";
ShareMemory=CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,10000,text);
address=MapViewOfFile(ShareMemory,FILE_MAP_ALL_ACCESS,0,0,0);
...
OnReceive()
{
CString str;
m_send.GetWindowsText(str);
strcpy((char*)address,(char*)(LPCWSTR)str);
...
}
跟踪发现vc6中address中保存0x00b5000而08中则保存0x00f70000,不知有没有关系 展开
接收端:(VC6.0)
OnInitDialog()
...
ShareMemory=CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,10000,"Mem File");
address=MapViewOfFile(ShareMemory,FILE_MAP_WRITE,0,0,0);
...
OnReceive()
{
CString str
strcpy((char*)(LPCTSTR)str,(char*)address);
m_receive.SetWindowsText(str);
}
发送端:(VS2008)
OnInitDialog()
...
CString text;
text="Mem File";
ShareMemory=CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,10000,text);
address=MapViewOfFile(ShareMemory,FILE_MAP_ALL_ACCESS,0,0,0);
...
OnReceive()
{
CString str;
m_send.GetWindowsText(str);
strcpy((char*)address,(char*)(LPCWSTR)str);
...
}
跟踪发现vc6中address中保存0x00b5000而08中则保存0x00f70000,不知有没有关系 展开
展开全部
我不晓得是不是这个问题?发送的时候有个转换貌似有点莫名其妙:strcpy((char*)address,(char*)(LPCWSTR)str);
为什么要用(LPCWSTR)来作强制类型转换?WIDE CHAR?你要处理中文字符?似乎有点问题。
你不然直接使用LPCTSTR来强制转换下试试。
为什么要用(LPCWSTR)来作强制类型转换?WIDE CHAR?你要处理中文字符?似乎有点问题。
你不然直接使用LPCTSTR来强制转换下试试。
更多追问追答
追问
听取您的建议改用LPCTSTR强制转换后,仍只传首字母。而且08之间互传也是这样,大神还有没有好的建议?
追答
你试过发送的内容使用全英文字符吗?如果不行,你自己在发送端增加代码,自己读取共享内存试试,看内存写入数据有没有错。用debug加断点,跟踪下问题是在什么时候出的。也可以将strcpy函数改用memcpy函数试试(但我感觉和这个关系应该不大)。
我印象中接收端应该用OpenFileMapping函数来打开共享内存地址吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询