Announcement

Collapse
No announcement yet.

DLL und Callback

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL und Callback

    Hallo zusammen,

    bräuchte einmal etwas Hilfe bei einer Callbackfunktion. Ich versuche eine Funktion einer Microsoft DLL die eine Callbackroutine benötigt zu nutzen. Der Zeiger auf die Callbackroutine wird aber nicht beim Funktionsaufruf übergeben sondern zuvor über eine RegisterMessageCallback Funktion. So weit so gut, das Registrieren meiner Callback funktion klappt. Sobald ich dann die eigentliche Funktion aufrufe komme ich auch bei meiner Callback routine an und alle übergebenen Parameter stimmen. Wenn ich auf Objekte meines Formulars lesend zugreife werden mir auch da die richtigen Werte angezeigt, z.B. Form1.Progressbar1.Position, allerdings steigt das Programm aus der Callback Routine aus sobald ich in ein Objekt meines Formulars schreiben will.

    Kann das jemand nachvollziehen? Wenn ich per einzelschritt debugge sehe ich das es im Code meiner Form weiter geht, da wird dann z.B. die Caption der Progressbar gesetzt was auch geht, aber wenn dann Repaint() der Progressbar aufgerufen wird lande ich dann von da aus in der unit system wo die Funktion TObject.Dispatch ausgeführt wird und beim Rücksprung ist dann Ende und die DLL Funktion läuft ohne Callback bis zum Ende.

    Habe absolut keine Ahnung was da schief läuft und komme dadurch nicht mehr weiter.

  • #2
    ganz merkwürdig. Ich kann innerhalb der Callback Routine in variablen schreiben. Ich kann auch die Caption der Form setzen aber sobald ich einen Refresh mache oder die Position der Progressbar in der Form ändere fliege ich aus der Routine raus.

    Comment


    • #3
      So, also es liegt wohl an der Microsoft wimgapi.dll. Hier eine Info von Microsoft:

      "The only difference between capture and apply regarding WIM_MSG_PROGRESS is that with capture the message is sent from the main thread (the WIMGAPI thread) while during apply the message is sent from a different thread that was spawned off from the WIMGAPI main thread.

      At one time we implemented multi-threaded restore (2 threads per CPU). This has since been turned off but we kept the progress on a different thread than the main thread restoring files and directories in order to easily turn on this scenario again at a later date."



      Sprich, der Callback läuft in einer eigenen Instanz. Stellt sich jetzt für mich also erst mal die Frage wie ich an meine Original Instanz komme und in dieser dann meine Progress Prozedure aufrufe?

      Comment

      Working...
      X