const AnsiString InfoStr[10] = {"CompanyName", "FileDescription",
   "FileVersion", "InternalName", "LegalCopyright", "LegalTradeMarks",
   "OriginalFileName", "ProductName", "ProductVersion", "Comments"};
  char *ExeName = Application->ExeName.c_str();
  DWORD n = GetFileVersionInfoSize(ExeName, &n);
  if (n > 0)
  {
    char *pBuf = (char *) malloc(n);
    AnsiString temp = "VersionInfoSize = ";
    Memo1->Lines->Add(temp + IntToStr(n));
    GetFileVersionInfo(ExeName, 0, n, pBuf);
    for (int i = 1; i < 5; i++)
    {
      LPVOID *pValue;
      unsigned int*  Len;
      if (VerQueryValue(pBuf,
      ("StringFileInfo\\080403a8\\"+InfoStr[i]).c_str() ,pValue,Len))
       Memo1->Lines->Add(InfoStr[i] + " = " + pValue);
      {
    pValue;
      };
    }
    free(pBuf);
  }
  else
    Memo1->Lines->Add("No version information found");help里面的例程有误:char *pValue;编译不能通过。
改成LPVOID *pValue;运行到VerQueryValue时出错。

解决方案 »

  1.   

    Delphi正常就可以了
    这里是D区呀,呵呵:)
      

  2.   

    你只是定义了指针,却没有分配地址。
    LPVOID *pValue = new LPVOID;应该可以解决吧。
      

  3.   

    //这样就OK了。const AnsiString InfoStr[10] = {"CompanyName", "FileDescription",
       "FileVersion", "InternalName", "LegalCopyright", "LegalTradeMarks",
       "OriginalFileName", "ProductName", "ProductVersion", "Comments"};
      char *ExeName = Application->ExeName.c_str();
      DWORD n = GetFileVersionInfoSize(ExeName, &n);
      if (n > 0)
      {
        char *pBuf = (char *) malloc(n);
        AnsiString temp = "VersionInfoSize = ";
        Memo1->Lines->Add(temp + IntToStr(n));
        GetFileVersionInfo(ExeName, 0, n, pBuf);
        for (int i = 1; i < 5; i++)
        {
          void **pValue;
          unsigned int  Len;
          if (VerQueryValue(pBuf,
          ("StringFileInfo\\080403a8\\"+InfoStr[i]).c_str() ,pValue,&Len))
           Memo1->Lines->Add(InfoStr[i] + " = " + (Char*)*pValue);
          {
        pValue;
          };
        }
        free(pBuf);
      }
      else
        Memo1->Lines->Add("No version information found");
      

  4.   

    ly_liuyang(Liu Yang) 同学好自私, pukerno3(飞天)同学没说对, wizardqi(男巫) 对了,放分。