Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#10

AW: Wie, um den Code zu übersetzen C + + bis Delphi

  Alt 5. Nov 2013, 09:00
Zitat von WIMGetImageInformation:
ppvImageInfo

[out] A pointer to a buffer that receives the address of the XML information about the volume image. When the function returns, this value contains the address of an allocated buffer, containing XML information about the volume image.

pcbImageInfo

[out] A pointer to a variable that specifies the size, in bytes, of the buffer pointed to by the value of the ppvImageInfo parameter.

Remarks

When the function succeeds, then the data describing the image is in Unicode XML format. Use the LocalFree function to free the memory pointed to by the ppvImageInfo parameter when no longer needed.
Delphi-Quellcode:
var
  created: DWORD; // Out-Parameter !!!!!!!!
var
  FileHandle: THandle;
  dwError: DWORD;
  Size: Integer;
  Buffer: PWideChar;
begin
  Memo1.Clear;

  InitWIMGAPI;
  FileHandle := WIMCreateFile(
    //PWideChar('d:\Wim_Image\x86\sources\install.wim'),
    PWideChar('C:\Windows\winsxs\amd64_microsoft-windows-setup-component_31bf3856ad364e35_6.1.7601.17514_none_905283bdc3e1d2d8\FirstUXRes.WIM'),
    WIM_GENERIC_READ, WIM_OPEN_EXISTING, WIM_FLAG_SHARE_WRITE,
    WIM_COMPRESS_XPRESS,
    @created); // or "nil);"

  case created of
    WIM_CREATED_NEW:
      Memo1.Lines.Add('Created New');
    WIM_OPENED_EXISTING:
      Memo1.Lines.Add('Opend Existing');
    //else
    // Memo1.Lines.Add('Unknown Created Code ' + IntToStr(created));
  end;

  if FileHandle = 0 then
  begin
    dwError := GetLastError;
    Memo1.Lines.Add('Error Open ' + IntToStr(dwError));
  end
  else
  begin
    //Size := 10000; // Out-Parameter
    //GetMem(Buffer, Size); // Out-Parameter

    if not WIMGetImageInformation(FileHandle, @Buffer, @Size) Then
    begin
      dwError := GetLastError;
      Memo1.Lines.Add('Error Info ' + IntToStr(dwError));
    end
    else
    begin
      Memo1.Lines.Add('Info Size ' + IntToStr(Size));
      Memo1.Lines.Add('');
      Memo1.Lines.Add(Buffer);
      WIMCloseHandle(FileHandle);
      LocalFree(HLOCAL(Buffer)); // allocated by WIMGetImageInformation
    end;
  end;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat