用了这个API很久,一直没有注意它的小细节,并且,我在网上看到很多人的代码,都没有注意到它的细节。
DWORD WINAPI GetModuleFileName(
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
nSize的单位是characters而不是bytes,characters在多字节的时候是bytes,在Unicode的时候不是bytes.
假设要结果完整返回C:\Windows\explorer.exe的话,如果lpFilename非NULL并且nSize == 10,那么这个API返回10(包含了结束字符),lpFilename结果是C:\Window
如果lpFilename非NULL,并且nSize足够大,那么这个API返回的结果等于_tcslen(lpFilename),不包含结束字符。
调用这个API的时候,lpFilename是不需要初始化的,MSDN上面的例子也是如此.我也一直没有初始化lpFilename.