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,不知有没有关系
展开
 我来答
匿名用户
2013-11-22
展开全部
这是因为VC6默认是ANSI编码,而VC2008默认是UNICODE编码,所有字符串都是宽字节的,一个简单解决办法就是把你的VC2008配置改下,使用多字节编码就行了
追问
感觉应该是您说的这个原因,不知如何改配置能否详细说说呀?
追答

工程配置,属性里,我没安装VS2008,截的图是VS2005的,凑合看吧,都是一样的哈


默认是下图所示,把它改成Use Multi-Byte Character Set就好了哈


stoneleafs
2013-11-21 · TA获得超过102个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:108万
展开全部
我不晓得是不是这个问题?发送的时候有个转换貌似有点莫名其妙:strcpy((char*)address,(char*)(LPCWSTR)str);

为什么要用(LPCWSTR)来作强制类型转换?WIDE CHAR?你要处理中文字符?似乎有点问题。
你不然直接使用LPCTSTR来强制转换下试试。
更多追问追答
追问
听取您的建议改用LPCTSTR强制转换后,仍只传首字母。而且08之间互传也是这样,大神还有没有好的建议?
追答
你试过发送的内容使用全英文字符吗?如果不行,你自己在发送端增加代码,自己读取共享内存试试,看内存写入数据有没有错。用debug加断点,跟踪下问题是在什么时候出的。也可以将strcpy函数改用memcpy函数试试(但我感觉和这个关系应该不大)。

我印象中接收端应该用OpenFileMapping函数来打开共享内存地址吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式