求助一个简单的问题,搞了一下午都没搞定。我是不是太蠢了。。 关键在于:GetFileInfo的第一个参数为常数时不会出错。为变量为出错。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 i dont know i am novice!! 你的EnumProcessModules和GetModuleFileNameEx函数呢? 请关注:http://www.csdn.net/expert/topic/411/411075.shtm分数为150分十万火级,如能给出答案,再送300分 TO vanta(^_^) :EnumProcessModules和GetModuleFileNameEx是在PSAPI中定义的。。具体的错误我没有发现。。我另外写了一下。oid CProcessInfo::GetDllInfo(LPTSTR strFile, CString * info1,CString * info2, CString * info3){DWORD dwRet,dwTemp=0;info1->Empty();info2->Empty();info3->Empty();dwRet=GetFileVersionInfoSize(strFile,&dwTemp);if(0==dwRet) return;char *buffer=new char[dwRet];if (!GetFileVersionInfo(strFile,dwTemp,dwRet,buffer)){delete [] buffer; return;}LANGANDCODEPAGE *lpTranslate;UINT uLen;dwRet=VerQueryValue(buffer,TEXT("\\VarFileInfo\\Translation"),(LPVOID *)& lpTranslate,&uLen);if(0==dwRet) { delete [] buffer; return; }char *strSub=new char[2048];char *strData;//=new char[2048];//lpTranslate[0].wCodePage=0x0804;//lpTranslate[0].wLanguage=0x04b0;wsprintf(strSub, TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"), lpTranslate[0].wLanguage, lpTranslate[0].wCodePage);dwRet=VerQueryValue(buffer,strSub,(LPVOID*)&strData,&uLen);if (0!=dwRet){strData[uLen]='\0'; info1->Format("%s",strData); //AfxMessageBox(strData);}wsprintf( strSub, TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"), lpTranslate[0].wLanguage, lpTranslate[0].wCodePage);dwRet=VerQueryValue(buffer,strSub,(LPVOID*)&strData,&uLen);if (0!=dwRet){ strData[uLen]='\0'; info2->Format("%s",strData);}wsprintf( strSub, TEXT("\\StringFileInfo\\%04x%04x\\CompanyName"), lpTranslate[0].wLanguage, lpTranslate[0].wCodePage);dwRet=VerQueryValue(buffer,strSub,(LPVOID*)&strData,&uLen);if (0!=dwRet){ strData[uLen]='\0'; info3->Format("%s",strData);}delete [] buffer;delete[] strSub;//free(strData);//delete strData;}这样就没错了。不过我还是想搞清上面的为什么会出错? 我想有可能是data变量的buffer太小了。 读取别的程序中SysListView32的内容 工具栏有时候不出提示 怎么设置一个变量来判断是否已经单击鼠标事件? 一个打开文件的问题 OnEraseBkgnd消息中:BitBlt() 如何截取并分析网页内容 关于CListCtrl的问题,很具有代表性的, 大家请来哦! 用ado好,还是用rdo好 讨论:从IDL开始所有的编程工作 VC嵌入汇编代码问题 如何编程可以实现把IC卡内的证书向系统注册(已经知道CSP及密钥容器名) 在windows2000下vc++6.0中,如何让显示结果窗口不自动关闭?
i am novice!!
http://www.csdn.net/expert/topic/411/411075.shtm
分数为150分
十万火级,如能给出答案,再送300分
具体的错误我没有发现。。我另外写了一下。
oid CProcessInfo::GetDllInfo(LPTSTR strFile, CString * info1,CString * info2, CString * info3)
{DWORD dwRet,dwTemp=0;
info1->Empty();
info2->Empty();
info3->Empty();
dwRet=GetFileVersionInfoSize(strFile,&dwTemp);
if(0==dwRet) return;
char *buffer=new char[dwRet];
if (!GetFileVersionInfo(strFile,dwTemp,dwRet,buffer))
{delete [] buffer;
return;
}
LANGANDCODEPAGE *lpTranslate;
UINT uLen;
dwRet=VerQueryValue(buffer,TEXT("\\VarFileInfo\\Translation"),(LPVOID *)& lpTranslate,&uLen);
if(0==dwRet)
{ delete [] buffer;
return;
}char *strSub=new char[2048];
char *strData;//=new char[2048];
//lpTranslate[0].wCodePage=0x0804;
//lpTranslate[0].wLanguage=0x04b0;
wsprintf(strSub,
TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate[0].wLanguage,
lpTranslate[0].wCodePage);
dwRet=VerQueryValue(buffer,strSub,(LPVOID*)&strData,&uLen);
if (0!=dwRet)
{
strData[uLen]='\0';
info1->Format("%s",strData);
//AfxMessageBox(strData);
}
wsprintf( strSub,
TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"),
lpTranslate[0].wLanguage,
lpTranslate[0].wCodePage);
dwRet=VerQueryValue(buffer,strSub,(LPVOID*)&strData,&uLen);
if (0!=dwRet)
{
strData[uLen]='\0';
info2->Format("%s",strData);
}
wsprintf( strSub,
TEXT("\\StringFileInfo\\%04x%04x\\CompanyName"),
lpTranslate[0].wLanguage,
lpTranslate[0].wCodePage);
dwRet=VerQueryValue(buffer,strSub,(LPVOID*)&strData,&uLen);
if (0!=dwRet)
{
strData[uLen]='\0';
info3->Format("%s",strData);
}
delete [] buffer;
delete[] strSub;
//free(strData);
//delete strData;
}这样就没错了。不过我还是想搞清上面的为什么会出错?