_tcslen用于tchar类型的有关问题

_tcslen用于tchar类型的问题。
有如下的代码

            TCHAR szModule[_MAX_PATH];  
    ::GetModuleFileName(NULL, szModule, _MAX_PATH);//得到本程序自身的全路径 

结果用_tcslen(szModule) 得到的长度是实际长度的一半。
我查看了一下定义:

typedef WCHAR TCHAR, *PTCHAR;
#define _tcslen         wcslen


为什么用_tcslen(szModule) 得到的长度是实际长度的一半那?请指教,谢谢。



------解决思路----------------------
_tcslen(szModule)
这个场合用法有问题
::GetModuleFileName(NULL, szModule, _MAX_PATH); 不会在szModule后面加\0,你必须根据返回值,自己加上\0,才能使用哪个函数

int L=::GetModuleFileName(NULL, szModule, _MAX_PATH);
_tcslen(szModule)之前,应该加上szModule[L]=0;

------解决思路----------------------
_tcslen用于tchar类型的有关问题

没有问题
------解决思路----------------------
(_tcslen(szName) +1) * sizeof(TCHAR) = 实际字符串字节数(包括结束符)
------解决思路----------------------
unicode是占用2个字节的。你需要个数跟字节数
------解决思路----------------------
GetModuleFileName
The GetModuleFileName function retrieves the full path and filename for the executable file containing the specified module. 

Windows 95: The GetModuleFilename function will return long filenames when an application's version number is greater than or equal to 4.00 and the long filename is available. Otherwise, it returns only 8.3 format filenames.

DWORD GetModuleFileName(
  HMODULE hModule,    // handle to module to find filename for
  LPTSTR lpFilename,  // pointer to buffer to receive module path
  DWORD nSize         // size of buffer, in characters
);
 
Parameters
hModule 
Handle to the module whose executable filename is being requested. If this parameter is NULL, GetModuleFileName returns the path for the file used to create the calling process. 
lpFilename 
Pointer to a buffer that is filled in with the path and filename of the given module. 
nSize 
Specifies the length, in characters, of the lpFilename buffer. If the length of the path and filename exceeds this limit, the string is truncated. 
Return Values
If the function succeeds, the return value is the length, in characters, of the string copied to the buffer.

If the function fails, the return value is zero. To get extended error information, call GetLastError. 

Remarks
If a module is loaded in two processes, its module filename in one process may differ in case from its module filename in the other process.

QuickInfo
  Windows NT: Requires version 3.1 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Unsupported.
  Header: Declared in winbase.h.
  Import Library: Use kernel32.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT.

See Also
Dynamic-Link Libraries Overview, Dynamic-Link Library Functions, GetModuleHandle, LoadLibrary