本人刚自学网络socket编程用来在客户端与服务器之间传递信息,在下面的句子中,HANDLE hFile=CreateFile(_T(filename),GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);发现必须给filename加_T()才可以将char*转化为LPCWSTR,但是编译后发先出现错误所_T找不到提示符,请问高人这如何改?

解决方案 »

  1.   

    添加 #include <tchar.h> 即可 
      

  2.   

    我加了#include<tchar.h>后,有新的错误,情况如下:char filename[]="E:\实验室\YUV格式\shipin.txt";   //定义了一个存的路径HANDLE hFile=CreateFile(_T(filename),
    GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);报错:“Lfilename”: 未声明的标识符。
    请问是怎么回事啊
      

  3.   

    不要仅求答案,要从找答案的过程中学到东西。。
    建议你找个已有的程序,里面带了_T这样的标识符的话,右键点击之,选择Go to Definition of _T
    然后网上搜关于Unicode和ASCII的相关知识
      

  4.   

    谢谢各位,问题我找出来了,但是确实如三楼所说的要从答案中学习,
    _T(filename)被译成Lfilename,确实未声明,这和直接在_T()中写字符串是有区别的,还将继续了解关于Unicode和ASCII的相关知识
      

  5.   

    HANDLE hFile=CreateFile(_T(filename),GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    ===================
    有这么写的吗?
    如果filename是常量,用_T的话, 也是写成_T("filename");
    如果filename是一个变量的话,根本就不用_T或是L的,直接定义为TCHAR类型就行了。
      

  6.   


    是这样的,编程的时候最好使用Unicode编码,按照Unicode编码规范声明并定义变量,用这个变量的时候是不加_T或TEXT或L修饰的
      

  7.   

    _T()只是一个宏定义,它的作用仅仅是告诉编译器,将其括号中的字符串常量当char处理(工程未使用Unicode)还是w_char(工程使用Unicode)处理。不能进行char到w_char的转换。用_T()宏的好处是,你的工程可以灵活的在Unicode或非Unicode的环境中编译而不需要改变代码。相应的,TCHAR这个宏在使用Unicode的时候,就被解释成w_char,反之则是char。另外还有很多与TCHAR配套使用字符串处理函数。其好处都是使你的工程可以灵活的在Unicode或非Unicode的环境中编译而不需要改变代码。
      

  8.   

    CreateFile(_T(filename),GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    这样写法不对,_T只能用于字符串常量,不能变量
      

  9.   

    w_char的意思是不是就是一个字符16位呢?网上搜的都好笼统,不太整的明白。
      

  10.   

    没有 w_char 吧?
    有wchar_t 的定义
    typedef unsigned short wchar_t;
    可以说是16位
      

  11.   

    谢谢纠正,确实只有wchar_t.平时引用宏习惯了,就写成w_char了。我用w_char要表达的也是wchar_t的意思