HANDLE hFile=CreateFIle(_T("C:\\TEST.DAT"),GENERIC_WRITE,FILE_SHARE_READ,NULL,
                CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
  AfxMessageBox(_T("Couldn't create the file!"));
else
{
  CFile myFile(hFile);
  static const char sz[]="Hockey is best!";
  myFile.Write(sz.1strlen(sz));
  myFile.Close();
}这是一段关于MFC文件系统的代码.有几个地方不明白:
1.代码中的两处 _T 是什么转换,在哪儿定义的?为什么要在这里使用?可以取掉吗?
我查了msdn,下面是CreateFile的函数原型
HANDLE CreateFile(
  LPCTSTR lpFileName,                         // file name
  DWORD dwDesiredAccess,                      // access mode
  DWORD dwShareMode,                          // share mode
  LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
  DWORD dwCreationDisposition,                // how to create
  DWORD dwFlagsAndAttributes,                 // file attributes
  HANDLE hTemplateFile                        // handle to template file
);
其中关于lpFileName又有lpFileName 
[in] Pointer to a null-terminated string that specifies the name of the object to create or open. 
Windows NT/2000/XP: In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to nearly 32,000 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see File Name Conventions. 
Windows 95/98/Me: This string must not exceed MAX_PATH characters. 而File Name Conventions里也没有涉及_T
看到很多地方都用到了这个_T,不太明白(是不是以下划线_开头的是一种特别的变量或者函数?)2.Afx开头的标是什么意思?是不是什么全局变量?请告知准确的中文含义?
为什么在MessageBox这个本身就可以用的API函数的前面还要加上Afx?
什么时候使用它们合适?是否需要包含<afx.h>或者<afxwin.h>,二者有什么差别?
还有以Afx开头的包括哪些?比如这里的API函数,或者变量等等?3.如果要使用MFC里的CFile类,需要包含哪些头文件?
我看到某个例子使用了#include<iostream>;
                    using namespace std;
名字空间我本以为是C#才引入的,现在才知道C++里已经有了,能大概解释一下什么意思吗?本人是VC初学者,请各位高手指教以上问题,能解答多少算多少,不甚感激!

解决方案 »

  1.   

    _T的意思是如果你定义了Unicode,那么字符串会自动变成Unicode型,否则为Ansi型Afx开头的函数是MFC全局函数的意思。CFile类需要afx.h头文件具体细节,你可以参考msdn呀,上面几个问题全都有详细的描述。
      

  2.   

    1._T好象是为了支持uncode才用的根据你的系统可以选择用还是不用。
    2.Afx好象是为了和以前的版本兼容才用的。
      

  3.   

    1._T是一个宏,为了能自动适应单字节编码或者双字节编码,例如当使用UNICODE来对字符串编码时,_T就在字符串前面加一个L,成为L"C:\\TEST.DAT",此时每字符占二字节。不使用UNICODE来对字符串编码(默认如此)则_T就跟没有一样。这样做到了一次编码,处处可用。2.AFX是微软最早研究程序框架时成立的开发小组名字,据说X只是为了好听,AF就是application framework的意思。这个小组就是负责开发visual studio的。afx开头的函数都是全局函数。如果使用MFC来编程,则统一使用afx开头的函数风格好些。afx开头的头文件是对对应的win32头文件的封装。3.需要包含<afx.h>
    名字空间是为了避免你的名字和别人的名字相同时引起混乱引入的一种机制。加上名字空间就好像加上了一个前缀一样,就不容易相同了。
      

  4.   

    谢谢3位
    不过我对msdn还不太熟练,只知道search,不知道如何直接找到要找的内容,就像刚买电脑的时候不知道如何使用注册表一样