AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi IStorage.CreateStream -> Länge des Namens/EOleSysError
Thema durchsuchen
Ansicht
Themen-Optionen

IStorage.CreateStream -> Länge des Namens/EOleSysError

Ein Thema von Ultimator · begonnen am 12. Okt 2005 · letzter Beitrag vom 24. Nov 2005
 
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#1

IStorage.CreateStream -> Länge des Namens/EOleSysError

  Alt 12. Okt 2005, 14:11
So, wiedermal ein Problem *gg*

Ich muss mich im Rahmen meines Programmes mit dem IStorage-Interface auseinandersetzen.
Genauer, mit IStorage.CreateStream (nachzulesen hier).

Jetz hab ich aber ein Problem. Wenn nämlich der Name zu lang ist, krieg ich eine EOleSysError-Exception (ich ruf OleCheck auf, um Exceptions mitzukriegen) mit der Meldung
Zitat:
---------------------------
Project1.exe
---------------------------
Der Name "%1" ist ungültig.
---------------------------
OK
---------------------------
Daraufhin hab ich mal in der MSDN-Lib unter IStorage.CreateStream (Link von oben) und hab gefunden, dass "the name must not exceed 31 characters in length". Ich darf also nicht mehr als 31 Zeichen im Namen haben.

Also hab ich mir gedacht, ich geb als Storage-Namen irgendeinen imaginären mit einer fortlaufenden Nummer an. Klappt aber nicht, ich bekomm immernoch die gleiche Meldung.
Hier ist mal der ganze Code, um ein Verzeichnis einem Storage hinzuzufügen (ist aus dem IMAPI-Tutorial vom entwickler):
Delphi-Quellcode:
function AddDirToStorage (aStorage : IStorage; aPath: String): Boolean;
var
  sPath: String;
  sr : TSearchRec;
  swStreamName,swFolderName : WideString;
  stgStream : IStream;
  stgSubDir : IStorage;
  aFilestream : TFileStream;
  aOleStream : TOleStream;
  counter: cardinal;
begin
  counter := 0;
  Result := true;
  aFilestream := nil;
  aOleStream :=nil;
  sPath := IncludeTrailingPathDelimiter(aPath);
  if SysUtils.FindFirst(sPath + '*.*', faAnyFile, sr) = 0 then
    try
      repeat
        if (sr.Name <> '.') and (sr.Name <> '..') then
          if (sr.Attr and faDirectory <= 0) then
            try
              try
                // Datei-Inhalt einlesen und im Stream ablegen
                aFileStream := TFileStream.Create(sPath + sr.Name,fmOpenRead);
                aFileStream.Position := 0;
                // Stream-Eintrag im Storage für die zu sichernde Datei anlegen
                swStreamName := sr.Name;
                OleCheck(aStorage.CreateStream(PWideChar(swStreamName),
                           STGM_CREATE or STGM_READWRITE or STGM_DIRECT or
                           STGM_SHARE_EXCLUSIVE, 0, 0, stgStream));
                // Verbindung zum IStream-Interface über OLE-Stream
                aOleStream := TOleStream.Create(stgStream);
                aOleStream.CopyFrom(aFileStream, aFileStream.Size);
              finally
                FreeAndNil(aOleStream);
                FreeAndNil(aFileStream);
              end;
            except
               Result :=false;
            end
          else
            begin
              swFolderName := sr.Name;
              if length(swFolderName) > 30 then
               begin
                swFolderName := 'Project-Folder' + IntToStr(counter);
                inc(counter);
               end;
              OleCheck(aStorage.CreateStorage(PWideChar(swFoldername),
                 STGM_READWRITE or STGM_CREATE or STGM_DIRECT or
                 STGM_SHARE_EXCLUSIVE , 0, 0, stgSubDir));
              AddDirToStorage(stgSubDir,sPath + sr.Name+ '\');
            end;
        Application.ProcessMessages;
    until FindNext(sr) <> 0;
  finally
    FindClose(sr);
  end;
end;
Ich hoff, ihr könnt mir (wie schon so oft *schleim* ) sagem, was ich anders machen muss, damit alles klappt

PS: Wusste nicht, ob das hier die richtige Sparte is, müsste aber schon, wegen IStorage und so^^

//edit: Ich seh grade, im Demoprogramm, das Bernd Ua auf seiner Internetseite zum Download anbietet, besteht genau der gleiche Fehler, also liegts irgendwo an Windows Wäre gut, wenn mir jemand helfen könnte
Julian J. Pracht
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 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