在a工程里:   
  BOOL   CCallDlg::CreateTextData(CString   strData)   
  {   
  DWORD   dsize   =   sizeof(strData);   
  HANDLE   hdata   =     ::CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,dsize,"DataOne");   
  if(hdata   ==   NULL)   
  {   
  this->MessageBox("create   memory   map   file   failed");   
  return   false;   
  }   
    
  LPVOID   lpdata   =   ::MapViewOfFile(hdata,FILE_MAP_READ|FILE_MAP_WRITE,0,0,dsize);   
  if(lpdata   ==   NULL)   
  {   
  this->MessageBox("map   View   of   file   failed");   
  return   false;   
  }   
    
  strcpy((char*)lpdata,(char*)&strData);  ////如果拷贝大数据量,这个strcpy会出错,会是什么原因呢,使用
strcat,memmove也一样 
    
  ASSERT(::UnmapViewOfFile(lpdata));   
    
  return   true;   
  }   strcpy((char*)lpdata,(char*)&strData);  ////如果拷贝大数据量,这个strcpy会出错,会是什么原因呢,使用
strcat,memmove也一样 
    

解决方案 »

  1.   

    用法错误,strData是CString类型,所以不应该使用取指符,应该这样用 strcpy((char*)lpdata, (LPCTSTR)strData);
      

  2.   

    还有,如果你的项目用UNICODE编译,就不能直接用strcpy了,因为LPCTSTR等效于const wchar_t*,必须做转换。
      

  3.   

    问题出在 DWORD dsize = sizeof(strData) 上,改成 DWORD dsize = sizeof(TCHAR) * strData.GetLength()。当然,同时要把 strcpy((char*)lpdata,(char*)&strData) 改成 lstrcpy((LPTSTR)lpdata,(LPCTSTR)strData)。
      

  4.   

    不好意思,上面的 GetLength() 应该加 1 后再乘 sizeof(TCHAR)。
      

  5.   

    我是lz, 谢谢楼上2位的回答!
    CString strData
    strcpy((char*)lpdata,strData);     ////如果拷贝大数据量,这个strcpy会出错,会是什么原因呢,使用 
    strcat,memmove也一样 小数据量是不会出错的  
      

  6.   

    DWORD       dsize       =       sizeof(strData);  
    这个是个常数吧,sizeof(CString)=4吧,显然你怎么操作都会错了~
      

  7.   

    我在工程改了,之间赋值一个很大的数字HANDLE       hdata       =           ::CreateFileMapping((HANDLE)0xffffffff,NULL,PAGE_READWRITE,0,100000,"DataOne"); 拷贝20000个字节的数字就会错。郁闷  
      

  8.   

    尽量使用安全类型函数,如:strncpy()、strncat()
      

  9.   

    xuxingok :这些函数都有试过
      

  10.   

    strData其实你还没给他分配空间,默认的strData都是放到同一个位置,只有实际使用时候他才会分配空间。
    小批量的也会错误的,只不过你还没发现而已。
    return       true; 之前你定义一个CString abc="";你的程序就出问题了。
      

  11.   

    xuxingok : 直接在strcpy类的函数当掉郁闷之极
      

  12.   

      strcpy((char*)lpdata,(char*)&strData);     ////如果拷贝大数据量,这个strcpy会出错,会是什么原因呢,使用 
    strcat,memmove也一样   
    ===============================================
    直接赋值就可以了。
    strData = (char*)lpdata;
      

  13.   

    CString 的字符容量有限,不能用在大数据量的地方,直接该为char *试试
      

  14.   

    是CString的问题,长度好像是260,长了会有问题,最好用char* 然后数据new出来。
      

  15.   

    谁说CString的长度不能超过260?只有文件路径的长度不能超过260(MAXPATH)。
    CString能存储的最大字符个数是 INT_MAX (2,147,483,647)
      

  16.   

    map的长度不能太大吧。
    我觉得100M一次的map,一点一点拷贝就没问题了
    楼主可以试试
      

  17.   

    这里有个对Cstring的详细说明http://www.chinaitpower.com/A/2001-10-10/1307.html
    lz可能用的时候有点问题