Wenn ich meinen renderstream start erstelle ich ein unsichtbares Window mit AllocateHWnd
Delphi-Quellcode:
if BB_RenderHandle = 0 then
BB_RenderHandle := Classes.AllocateHWnd(BassBoxVis1.RenderProc);
Anschließend wird ein Timer erstellt
Delphi-Quellcode:
if VisDataThread.VisChan <> 0 then
begin
if (m_lId = 0) then
// create High Resolution Timer use mmsystem
m_lId := timeSetEvent(25, 300, @TimerProc, BB_RenderHandle , TIME_PERIODIC);
end;
Im Timer schicke ich jetzt ne PostMessage (MyTimerMessage)
Delphi-Quellcode:
procedure TimerProc(wTimerID: DWORD; Msg: DWORD;
dwUser: longint;
dw1: longint;
dw2: longint); stdcall;
begin
PostMessage(BB_RenderHandle, MyTimerMessage, dw1, dw2);
end;
die dann wenn sie in der RenderProc empfangen wird die FFT Daten bearbeitet und an
das ParentWindow (HauptAnwendung) zurückgibt.
procedure RenderProc(var Msg: TMessage); message MyTimerMessage;
Das ganze spielt sich in einer
DLL ab und wird dann an das jeweilige Fenster der Hauptanwendung zum rendern zurückgegeben.
Klappt alles Super nur in .NET C# nicht.
Egal wie oft der Timer abfeuert ich komme nicht in die Renderproc, sieht so aus als wenn in .NET die Anwendung
die Message nicht weiterleitet.
Hab gelesen das AllocateHWnd nicht Speichersicher sein soll..
Nur seltsam das es in VB, Delphi und C++ keine probleme verursacht.
Die Proc ist nichts besonderes
Delphi-Quellcode:
procedure TBASSBoxVis.RenderProc(var Msg: TMessage);
begin
if Msg.Msg = MyTimerMessage then
if VisDataThread.RenderFromStream then
begin
// bla bla
end;
Msg.Result := DefWindowProc(BB_RenderHandle, Msg.Msg, Msg.WParam, Msg.LParam);
end;
Nu dann werde ich jetzt gerne warten ob du mit den Krümeln was anfangen kannst.
gruss