Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 09:22
Zitat von marabu:
Moin Emil,

in Delphi solltest du einen booleschen Ausdruck nicht redundant erweitern:

Delphi-Quellcode:
begin
  // ...
  if DeleteFile(thePath + '~tmp4358.dat') {= False} then
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION);
  // ...
end;
Boolsche Werte werden auf Integer-Werte abgebildet und umgekehrt. Für Delphi gibt es eine Abbildungsregel, API-Funktionen verwenden mitunter eine abweichende. Dies nur am Rande.

Zu deinem eigentlichen Problem: Wenn du eine Datei im Abschnitt finalization löschen willst, dann solltest du sie im Abschnitt initialization bereitgestellt haben. Arbeitest du dabei mit API-Funktionen wie CreateFile() oder mit Delphi Streams oder mit den alten Prozeduren AssignFile() etc.? Zu welchem Zeitpunkt besorgst du dir den Zugriff auf die temporäre Datei? Wann und wo schließt du sie?

Freundliche Grüße

ich initialisiere (loadlibrary) in meiner INIT Routine
könnte ich in die initializations routine verschieben wäre kein problem.
Mit Delphi Stream wird aus der resource eingeladen in dieser besagten INIT Routine

Angesprochen wird sie sobald ein zugriff auf ein plugin stattfindet
sie bleibt im speicher und wird nicht immer wieder gelöscht(freigegeben) denke ist nicht nötig da nur 4K groß
ich schließe sie in finilization bevor ich sie lösche... was nicht geht.

Uwe meint es hätte mit dem DllCache zu tun (Ich schätze mal, das das daran liegt, das DLL's gecached werden.)

Edit:
habs nochmal versucht!
So siehts aus .. gleiche problem mit dem löschen..
Delphi-Quellcode:
initialization
  begin
    getVisHeader := nil;

     //Wasabi initialisieren
     SetLength(thePath, MAX_PATH) ;
     lng := GetTempPath(MAX_PATH, PChar(thePath)) ;
     SetLength(thePath, lng) ;

     ResStream := TResourceStream.Create(HInstance, 'DLL', 'DATA');
     ResStream.SaveToFile(thePath + '~tmp4358.dat');
     SetFileAttributes(PChar(thePath + '~tmp4358.dat'), FILE_ATTRIBUTE_HIDDEN);

     ResStream.free;

     WAServiceHandle := Loadlibrary(PChar(thePath + '~tmp4358.dat'));
     if (WAServiceHandle = 0) then
       begin
       MessageBox(0, 'Error loading GetAPIService',
                              'initialization', MB_OK or MB_ICONERROR);
       halt;
     end;
  end


finalization
  begin

  CloseVisDLL;
  
  if (WAServiceHandle <> 0) then
  begin
    FreeLibrary(WAServiceHandle);
    WAServiceHandle := 0;
  end;

  if (DeleteFile(thePath + '~tmp4358.dat') = false) then
    MessageBox(0, PChar(SysErrorMessage(GetLastError)),
      'Confirm', MB_OK or MB_ICONINFORMATION);

  end
gruss Emil
  Mit Zitat antworten Zitat