![]() |
Callback Funktion
Hallo zusammen,
habe erhebliche Probleme mit einer Callback funktion. Ich versuche derzeit eine Komponente zu schreiben die verschiedene Funktionen der wimapi.dll zur Verfügung stellen soll. Die Funktionen an sich funktionieren auch, allerdings gibt es da eine ApplyImage Funktion die sofern zuvor über eine andere funktion registriert einen Callback macht. So weit klappt das auch, nach Aufruf der Apply funktion kommt das Programm auch in dieser Callback Routine an und sämtliche Variablen sind einwandfrei verfügbar. Von da aus rufe ich nun eine eigene doProgress Routine auf und diese kommt dann auch an der richtigen Stelle an und prüft dann ob onProgress assigned wurde und führt diese dann aus. Dort komme ich auch mit dem Debugger an, wenn ich nun aber z.B. in den .Position wert einer Progressbar schreibe (lesen geht) dann steigt Delphi aus dem Debugger aus und die Apply Routine wird bis zum Ende fortgesetzt ohne das noch mal im Callback angehalten wird. Hat hier jemand eine Idee woran das liegen könnte? Über diese Zeilen wird der Zeiger auf die Callback Routine gesetzt:
Delphi-Quellcode:
WIMRegisterMessageCallback(0, @Messagecallback, 0);
if TempPath = '' then TempPath:= 'c:\temp'; // todo: Windows Tempverzeichnis holen und setzen ForceDirectories(TempPath); if WIMSetTemporaryPath(hWim, pchar(TempPath)) then begin Image := WimLoadImage(hWim, Index); // Hier wird der Index bestimmt der geladen wird. if Image <> 0 then begin TargetPath := IncludeTrailingPathDelimiter(TargetPath); ForceDirectories(TargetPath); try Result := WIMApplyImage(Image, pchar(TargetPath), 0); except on e: Exception do begin ; // raise ?! end; // exception end; // try WIMUnregisterMessageCallback(0, @Messagecallback); Die Callback Routine springt auf eine doProgress Routine:
Delphi-Quellcode:
Und die DoProgress Funktion ruft dann die onProgress zugewiesene Procedure FProgressEvent auf:
function MessageCallBack(msgID: dword; param1: uint; const param2: uint; user: pointer): longint; stdcall;
var MyAPI: TObject; begin MyAPi:= ApiObject; if Assigned(TWimApi(MyApi).FProgressEvent) then TWimApi(MyApi).doProgressEvent(param1); MessageCallback := WIM_MSG_SUCCESS; end;
Delphi-Quellcode:
function TWimApi.doProgressEvent (const Percent: integer): boolean;
begin result := false ; if Assigned (FProgressEvent) then begin FProgressEvent(Self,'nix',1,Percent,1,1) ; end; end ; Im Formular selber sieht das dann so aus:
Delphi-Quellcode:
procedure TForm1.WIMProgress(Sender: TObject; CurrentFile:string; MsgID:Cardinal; Progress, TicksLeft, FileCount: Integer);
begin // Progress TRY Form1.Progressbar1.Position:= Progress; // steigt aus except on e: Exception do // und kommt hier nicht mal an begin SysErrorMessage(GetLastError); end; END; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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 by Thomas Breitkreuz