***********百思不得其解,高手看看,关于字符串的***************
我在两个进程中通信,其中一个是CB编写的,另一个是VC编写的,主要是传递一个字符串,我在CB中的代码如下所示:
AnsiString sFile = "D:\\coWork\\a.dwg";
HWND hWnd = FindWindow(NULL,"网络消息处理窗口");
char * cFileName;
cFileName = new char[sFile.Length()+1];
strcpy(cFileName,sFile.c_str());
cFileName[sFile.Length()]='\0';
//下面的代码是把cFileName放入一个结构中,用WM_COPYDATA消息传递到另一 //个进程
COPYDATASTRUCT cds;
cds.dwData = sFile.Length();
cds.cbData = sizeof(char)*(sFile.Length());
cds.lpData = cFileName;
Application->MessageBox((char *)cds.lpData,"",MB_OK);
int iResult = SendMessage(hWnd,WM_COPYDATA,0,(LPARAM)&cds);
在另一个进程中用VC写的接收:
char *pszFileName=new char [pCopyDataStruct->cbData+1];
strcpy(pszFileName,(char *)pCopyDataStruct->lpData);
现在的问题是,我能保证数据肯定是传过去了,但每次在vc端的进程中得到的数据有时不对,就是得到的字符串除了有D:\\coWork\\a.dwg外,末尾还有几个字节的乱码。这种错误不是每次都有,有时候出现有时候又不出现。
请大家看看我的代码,到底错在哪儿。CB中的AnsiString 与char还有什么区别吗?
谢谢。
问题点数:85、回复次数:11Top
1 楼jason802(小糊涂仙)回复于 2001-10-30 16:05:15 得分 30
确定最后一位是'\0',否则后面有几个乱码Top
2 楼Dala(Dala)回复于 2001-10-30 16:05:55 得分 10
不懂。你用char * cFileName = "D:\\coWork\\a.dwg";
代替下面一堆不行吗?再用strlen代替AnsiString.Length
AnsiString sFile = "D:\\coWork\\a.dwg";
char * cFileName;
cFileName = new char[sFile.Length()+1];
strcpy(cFileName,sFile.c_str());
cFileName[sFile.Length()]='\0';
Top
3 楼quengzi(Hades)回复于 2001-10-30 16:07:49 得分 20
char 有unicode 和ANSI两种,一般vc工程中为unicodeTop
4 楼jason802(小糊涂仙)回复于 2001-10-30 16:08:52 得分 0
在VC中用单步执行一下,看char指针最后一位值是不是0Top
5 楼harrypotter(哈里*波特)回复于 2001-10-30 16:25:59 得分 0
to Dala(大拉):
我用AnsiString sFile = “d:\\coWork\\a.dwg”,是因为我用的是CB中的TOpenDialog,该对话框返回的是AnsiString。
to quengzi(snowolf) :
这两者有什么区别。
to jason802(小糊涂仙) :
我在vc的程序中写成这样:
char *pszFileName=new char [pCopyDataStruct->cbData+1];
strcpy(pszFileName,(char *)pCopyDataStruct->lpData);
pszFileName[pCopyDataStrruct->cbData] = '\0';
也同样有上面的问题。
Top
6 楼harrypotter(哈里*波特)回复于 2001-10-30 16:30:17 得分 0
我现在想知道是不是我用AnsiString 的方法Length()得到的字符串的长度实际上是不对的。Top
7 楼Kevin_qing()回复于 2001-10-30 16:38:55 得分 10
gu ji shi CB chu cun string de fang shi bu yiyang,
ke neng shi zhe yang de .
struct string{
DWORD length;
char data[];//not terminate with 0
};
er VC shi
struct string{
char data[];//terminate with 0
};
Top
8 楼harrypotter(哈里*波特)回复于 2001-10-30 19:08:56 得分 0
还是不对呀Top
9 楼treamboy(亲月)回复于 2001-10-30 20:44:32 得分 5
对,,,“char 有unicode 和ANSI两种,一般vc工程中为unicode ”Top
10 楼lownr(廖宇雷)回复于 2001-10-30 20:59:58 得分 10
可以使用内存文件映射在进程间共享数据。
参考一下下面的帖子:
http://www.csdn.net/expert/topic/342/342249.shtmTop
11 楼harrypotter(哈里*波特)回复于 2001-11-02 15:34:11 得分 0
问题没解决,但还是给分Top




