Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Storage Streams (https://www.delphipraxis.net/1290-storage-streams.html)

sakura 10. Nov 2002 14:42


Storage Streams
 
Hi :nerd:,

hoffentlich kann mir jemand von Euch ja auf die Sprünge helfen. Folgender Code-Abschnitt:

Delphi-Quellcode:
const
  cStagingLiveVersion: LongInt = $03000100;
  FMTID_SummaryInformation: TGUID = '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}';

type
  TPropSpecArray = array of TPropSpec;
  PPropSpecArray = ^TPropSpecArray;
 
  TPropVariantArray = array of TPropVariant;
  PPropVariantArray = ^TPropVariantArray;

var
  Package: IStorage;
  OS: TOleStream;
  Stm: IStream;
  Writer: TWriter;
  PSS: IPropertySetStorage;
  PS: IPropertyStorage;
  PSA: TPropSpecArray;
  PVA: TPropVariantArray;
begin
  if not SUCCEEDED(StgOpenStorage(PWideChar(GetPackageName), nil,
      STGM_READWRITE or STGM_SHARE_EXCLUSIVE, nil, 0, Package)) then
    OleCheck(StgCreateDocFile(PWideChar(GetPackageName), STGM_CREATE or
        STGM_READWRITE or STGM_SHARE_EXCLUSIVE, 0, Package));

  PSS := Package as IPropertySetStorage;
  [color=#f60000]OleCheck(PSS.Open(FMTID_SummaryInformation, STGM_WRITE or
      STGM_SHARE_EXCLUSIVE, PS));[/color]

  SetLength(PSA, 1);
  SetLength(PVA, 1);
  try
    PSA[0].ulKind := PRSPEC_PROPID;
    PSA[0].propID := PIDSI_TITLE;
    PVA[0].vt := VT_LPSTR;
    PVA[0].pszVal := 'Content Ace v3 - Staging Package Item';
 
    OleCheck(PS.WriteMultiple(1, @PSA[0], @PVA[0], 2));
  finally
    SetLength(PSA, 0);
    SetLength(PVA, 0);
  end;
macht mir Probleme. Ich komme nicht über die rot-markierte Zeile hinaus. Die Idee stammt aus dem Buch Delphi COM Programming von Eric Harmon.

Wer hat eine Idee :?:

...:cat:...

P.S. Eine vernünftige Fehlermeldung kann ich nicht liefern, da COM mir sagt, ich soll mich an meinen Systemadministrator wenden ... :( Aber ich weiss es auch nicht. ;)

Christian Seehase 10. Nov 2002 14:51

Moin sakura,

wo ist GetPackageName deklariert?
Das kann ich irgendwie nicht so recht finden.

sakura 10. Nov 2002 14:52

:oops:

Lokale Procedure, welche lediglich den Dateinamen für das Package zurückliefert.

z.B.: 'C:\Temp\Package.dat'

Christian Seehase 10. Nov 2002 15:05

Moin sakura,

bei mir meckert er immer: STG_E_FILENOTFOUND (80030002)
(an der gleichen Stelle)

Welche Art Package meinst Du?

sakura 10. Nov 2002 15:21

Mit Package meine ich diese Storage Streams - in diesen Dateien kann man wunderbar verschiedene Elemente getrennt voneinander speichern. Intern sind diese "ähnlich" einem eigenem Dateisystem. Word benutzt auch dieses Format zum Speichern von Dokumenten.

sakura 10. Nov 2002 15:40

Ich habe jetzt sichergestellt, dass die gewünschte Datei existiert - aber der gleiche Fehler kommt noch immer. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz