MFC UNICODE下,获取文件信息是乱码?请教为什么
MFC UNICODE下,获取文件信息是乱码?请问为什么?
VerQueryValue(pBuf, TEXT("\\StringFileInfo\\080404b0\\FileDescription"), &lpBuffer, &uLen);
lpBuffer输出内容为乱码?为什么啊?
------解决思路----------------------
lpBuffer什么类型,他也要是宽字符版本的
------解决思路----------------------
仅供参考:
VerQueryValue(pBuf, TEXT("\\StringFileInfo\\080404b0\\FileDescription"), &lpBuffer, &uLen);
lpBuffer输出内容为乱码?为什么啊?
------解决思路----------------------
lpBuffer什么类型,他也要是宽字符版本的
------解决思路----------------------
仅供参考:
#pragma comment(lib,"version")
#include <windows.h>
#include <stdio.h>
void HexDump(char *buf,int len,int addr) {
int i,j,k;
char binstr[80];
len=(int)(*(WORD *)buf);
printf("0x%08X bytes:\n",len);
for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%08x -",i+addr);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j+=2) {
sprintf(binstr,"%s%C",binstr,(buf[j]<=0x20&&buf[j+1]==0)?L'.':*(wchar_t *)&buf[j]);
}
printf("%s\n",binstr);
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j+=2) {
sprintf(binstr,"%s%C",binstr,(buf[j]<=0x20&&buf[j+1]==0)?L'.':*(wchar_t *)&buf[j]);
}
printf("%s\n",binstr);
}
}
int main(int argc,char **argv) {
DWORD dwVerHnd;
DWORD dwVerInfoSize;
VS_FIXEDFILEINFO *pFileInfo;
LPVOID lpvMem;
HANDLE hMem;
unsigned int uInfoSize;
WORD m_nProdVersion[4];
if (argc<2) {
printf("Usage: %s fullpathfilename.ext [dumpall]\n",argv[0]);
return 1;
}
dwVerInfoSize = GetFileVersionInfoSize(argv[1], &dwVerHnd);
if (dwVerInfoSize) {
hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem = GlobalLock(hMem);
GetFileVersionInfo(argv[1], dwVerHnd, dwVerInfoSize, lpvMem);
VerQueryValue(lpvMem,"\\",(void**)&pFileInfo, &uInfoSize);
m_nProdVersion[0]=HIWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[1]=LOWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[2]=HIWORD(pFileInfo->dwProductVersionLS);
m_nProdVersion[3]=LOWORD(pFileInfo->dwProductVersionLS);
printf("The file [%s]'s version: %d.%d.%d.%d\n",argv[1],
m_nProdVersion[0],
m_nProdVersion[1],
m_nProdVersion[2],
m_nProdVersion[3]);
if (argc>2) {//dumpall
HexDump((char *)lpvMem,dwVerInfoSize,0);
}
GlobalUnlock(hMem);
GlobalFree(hMem);
} else {
printf("Can not GetFileVersionInfoSize(%s,...)!\n",argv[1]);
}
return 0;
}