AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Callback Funktion

Ein Thema von MaxWafer · begonnen am 6. Sep 2007
Antwort Antwort
MaxWafer

Registriert seit: 23. Dez 2006
1 Beiträge
 
#1

Callback Funktion

  Alt 6. Sep 2007, 15:39
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:
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;
Und die DoProgress Funktion ruft dann die onProgress zugewiesene Procedure FProgressEvent auf:

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;
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz