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