Einzelnen Beitrag anzeigen

tommie-lie
(Gast)

n/a Beiträge
 
#4

Re: WaveInOpen - CALLBACK_FUNCTION - Problem

  Alt 9. Jul 2003, 14:53
Zitat von red:
gibt es ne möglichkeit die Callback-Routine "ins Object zu legen"
Das habe ich schon mit der ThreadProc probiert, die ich in einem Objekt haben wollte, und habe es nicht hingekriegt.
Windows erwartet "echte" Funktionen als Parameter, da Objekte aber intern Pointer sind, haben sie keine echten Adressen für ihre Methoden, den Windows benutzen könnte.
Daher schlägt normalerweise schon der Versuch fehl, einen Pointer auf eine Methode (Funktion oder Prozedur in Objekt) zu benutzen. (Fehlermeldung: "Variable required")

Zitat:
Address of a fixed callback function .. entfällt ja nun
a handle to a window .. entfällt auch
wie sieht es aus mit threads bzw einem event handle? (kenn mich mit beidem garnich aus)
Also bei einem Thread werden an das Handle des Threads die Nachrichten MM_WIM_OPEN, MM_WIM_CLOSE, und MM_WIM_DATA geschickt, die du mit GetMessage
selbst abfangen musst (wie in einem nonVCL-Programm), solange der Thread läuft. Ich weiß nicht genau, was du in deiner WaveInProc machen würdest, wenn sie funktionieren würde, aber mit Hilfe von InterlockedExchange, CriticalSections und Pointern wäre das sicherlich eine brauchbare Alternative.
Bei einem Event Handle handelt es sich um ein Windows-Event, das zwei Stati hat, entweder "signaled" oder "nonsignaled". Das ganze arbeitet auf Thread-Ebene und dient dazu, einen Thread für eine unbestimmte Zeit auf "Idle" zu zu setzen und automatisch wieder zu wecken. Die Funktion dazu lautet "WaitForSingleObject" und nimmt u.A. ein Event als Parameter auf. Die Funktion ist vom Ergebnis ähnlich wie Sleep(), nur daß auf dieses Event gewartet wird, daß von einem anderen Thread auf "signaled" gesetzt wird. Wie damit irgendwelche Parameter übergeben werden sollen, weiß ich nicht (davon steht auch nix im PSDK).
  Mit Zitat antworten Zitat