关键在于
:GetFileInfo的第一个参数为常数时不会出错。为变量为出错。

解决方案 »

  1.   

    i dont know 
    i am novice!!
      

  2.   

    你的EnumProcessModules和GetModuleFileNameEx函数呢?
      

  3.   

    请关注:
    http://www.csdn.net/expert/topic/411/411075.shtm
    分数为150分
    十万火级,如能给出答案,再送300分
      

  4.   

    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;
    }这样就没错了。不过我还是想搞清上面的为什么会出错?
      

  5.   

    我想有可能是data变量的buffer太小了。