AGB  ·  Datenschutz  ·  Impressum  







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

DLL Init, Timer läuft nicht an

Ein Thema von schwa226 · begonnen am 12. Apr 2010 · letzter Beitrag vom 27. Apr 2010
Antwort Antwort
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

Re: DLL Init, Timer läuft nicht an

  Alt 15. Apr 2010, 19:24
Will ja nicht pushen, aber ich werde noch Wahnsinnig!

Das SetTimer geht nicht, auch nicht per Callback.
Dies wird erst ausgelöst wenn die Form angezeigt wird!

Der Ablauf ist nun so:
Die DLL wird geladen,
INIT-Funktion wird aufgerufen -> Thread wird erstellt -> Execute -> frMain (Form wird erzeugt):

Delphi-Quellcode:
procedure TMyMainThread.Execute;
var
  msg:Tmsg;
begin
  try
    InitFinished := False;

    if Not Assigned(frMain) then
      frMain := TfrMain.Create(NIL);

    frMain.AddLog('plugin got init');

    InitFinished := True;

    while not Terminated do
    begin
      Sleep(1);

      if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then //warten auf Message then
      begin
        case msg.message of
          WM_SHOWFORM:
            begin
              if IsWindow(msg.wParam) then
                if Application.Handle <> msg.wParam then
                  Application.Handle := msg.wParam;
              if NOT frMain.Showing then
                frMain.Show;
            end;
          WM_STARTUP:
            begin
              if Assigned(frMain) then
                frMain.Start_StartUp(StartDelay);
            end;
          WM_STOP:
            begin
              if Assigned(frMain) then
              begin
                frMain.AddLog('stopped plugin');
                if ((Assigned(frMain.HIDDevice)) and (not frMain.HIDDevice.IsPluggedIn)) then
                  frMain.JvHidDeviceController.CheckIn(frMain.HIDDevice);

                if Assigned(frMain.JvHidDeviceController) then
                  FreeAndNil(frMain.JvHidDeviceController);
              end;
            end;
          WM_QUIT: Terminate;
          else begin
            //TranslateMessage(msg);
            DispatchMessage(msg);
          end;
        end;
      end;
    end;

  finally
    if Assigned(frMain) then
    begin
      if frMain.Showing then
        frMain.Close;
      FreeAndNil(frMain);
    end;
  end;
end;
//funktion was ausgelöst wird wenn das Device entfernt wird:
Delphi-Quellcode:
procedure TfrMain.JvHidDeviceRemoval(HidDev: TJvHidDevice);
begin
  AddLog('Device got removed: ' + HIDDevice.ProductName);
  if ((Assigned(HIDDevice)) and (NOT HIDDevice.IsPluggedIn)) then
  begin
    if ((HidDev.Attributes.VendorID = VendorID) AND
      (HidDev.Attributes.ProductID = ProductID) AND
      (HidDev.ProductName = ProductName )) then
    begin
      try
        PostThreadMessage(MyMainThread.ThreadID, WM_STOP, 0, 0);

        OutputDebugString(PWideChar('Device got disconnected'));
      finally
//todo
      end;
    end;
  end;
end;
Nun bleibt meine DLL in frMain.JvHidDeviceController.CheckIn(frMain.HIDDev ice); stehen!

Wenn das Device geöffnet wird, wird für HIDDevice ein "WorkerThread" erzeugt.
Dieser will bei CheckIn gestoppt werden.

Und bei Thread Waitfor wartet man für immer, ausser die EXE wird beendet, dann kommt der Debugger sofort aus dem TThread.Waitfor zurück.

Irgendwie kommen immer wieder neue Probleme mit DLL + Form auf...
Delphi 2010, Update 4 & 5
  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 22:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz