本帖最后由 shentao17792 于 2010-03-03 15:40:36 编辑

解决方案 »

  1.   

    直接地址转换
    然后memcpy就可以了
    不过你那个cstring最好换下,换成char[256]之类的
      

  2.   

    memcpy
      

  3.   

    发现用socket的函数,如send,recive等,其参数都不接受unicode的WCHAR或TCHAR,不知各位是如何解决这种问题的?
      

  4.   


    明白了。一般来说用宽字节传的话,是不是比较浪费带宽。
    对于传输文件这种应用,还是用char比较好,是吗?
      

  5.   

    强制地址转换呀。send 跟recv的参数其实就是字节流,双字节的他自然是不可能匹配了,强制转换下就可以了
      

  6.   

    恩,是要浪费带宽,而且你如果和别人的软件通信也不容易沟通,最好还是char*
      

  7.   

    最好搞成char []这种格式,发送出去
      

  8.   

    明白了,谢谢各位。还有一个小问题,现在改用char了。
    struct FileInfo 

         ULONGLONG nFileLen;//文件长度 
          char cFileName[MAX_PATH];//文件名 
    }; 这时候通过
    sendFile.GetFileName().GetBuffer(0)//sendFile是欲发送的文件
    获得了文件名,类型为wchar_t*,请教如何复制到cFileName中呢。在vc6中可以用strncpy来做,在vs2008中好像就不行了。
      

  9.   

    总是报
    error C2664: “strncpy”: 不能将参数 2 从“wchar_t *”转换为“const char *”
      

  10.   

    你得先用WideCharToMultiByte转一下
      

  11.   

    已经解决了,谢谢楼上。
    WideCharToMultiByte要调用两次,第一次给cchMultiByte参数传0,获得目标缓冲区需要的大小。再调用一次,将cchMultiByte参数设置为前一次的返回值,即可。
      

  12.   

    回到我一楼的问题。。
    ULONGLONG nFileLen怎样放到TCHAR* m_fileInfoBuf这种缓冲区中呢。
    我用这种形式:
    *((DWORD*)m_fileInfoBuf) = sendfileInfo.nFileLen;
    可以编译通过,但是调试到这一步就报内存错误。
    这到底是怎么回事哦。
    求教各位啦。
      

  13.   

    memcpy(m_fileInfoBuf,&sendfileInfo.nFileLen,sizeof(DWORD));
    这种形式也试了一下,依然是编译通过,调试运行到这行就报错
      

  14.   

    把m_fileInfoBuf定义成char*
    然后memcpy(m_fileInfoBuf,&sendfileInfo,sizeof(ULONGLONG) + strlen(sendfileInfo.cFileName)); 
      

  15.   

    直接memcpy。网络发数据最好都弄到char的buf里面发。别用结构体