Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#3

AW: AllocateHWnd C#

  Alt 7. Jul 2013, 17:51
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

Geändert von EWeiss ( 7. Jul 2013 um 18:00 Uhr)
  Mit Zitat antworten Zitat