AGB  ·  Datenschutz  ·  Impressum  







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

DLL Messagequeue

Ein Thema von schwa226 · begonnen am 18. Mär 2011 · letzter Beitrag vom 18. Mär 2011
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.487 Beiträge
 
Delphi 12 Athens
 
#1

AW: DLL Messagequeue

  Alt 18. Mär 2011, 09:34
Egal in welchem Thread man AllocateHWnd aufruft, die Messages werden immer an den VCL-Thread gesendet.

Wenn man also eine eigene MessageLoop nutzen will, sollte man da aufpassen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
schwa226

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

AW: DLL Messagequeue

  Alt 18. Mär 2011, 11:36
So,

wie ich mir gedacht habe läuft es mit einer VCL Application ohne Probleme.
Ich kann das Device öffnen und wieder schließen.

In der DLL bleibt es beim Öffnen stehen.
Auch ein Einbinden der D6DLLSynchronizer.pas hat nichts gebracht. Diese würde ja ein AllocateHWnd durchführen.

Jetzt stellt sich mir die Frage wie ich das machen kann damit es in der DLL auch funktioniert!?

Das ganze in einen eignenen Thread auszulagern möchte ich eigentlich umgehen.

Edit:
Jetzt habe ich einfach das einmal Probiert:
Delphi-Quellcode:
Type
  TTest = class(TThread)
    private
    public
      constructor Create();
    protected
      procedure Execute; override;
    end;

constructor TTest.Create();
begin
  inherited create(True); // CreateSuspended = true

  FreeOnTerminate := True;
end;

procedure TTest.Execute;
var
  msg : Tmsg;
begin
  while not Terminated do
  begin
    Sleep(1);
  end;
end;
In meiner DLL rufe ich dann auf:
Delphi-Quellcode:
            test := TTest.Create;
            test.Start;
Nun wird der Thread erzeugt, aber trotz Start kommt er nicht in die Execute?
Ein Breakpoint in der Execute bleibt unangetastet. Die DLL arbeitet aber step für step weiter.

Wenn schon dieser Thread nicht ausgeführt wird kann das auch der Grund sein warum es mit der Funktion auch nicht geht.
Delphi 2010, Update 4 & 5

Geändert von schwa226 (18. Mär 2011 um 12:10 Uhr)
  Mit Zitat antworten Zitat
schwa226

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

AW: DLL Messagequeue

  Alt 18. Mär 2011, 14:15
Habe es nun doch noch geschafft!

Die Funktion darf nicht im öffnen der DLL aufgerfufen werden.
Wenn ich sie über eine exported Funktion aufrufe geht es ohne Probleme.

Nun habe ich aber noch eine Frage zwecks C++ -> Delphi:
Code:
INFSMART_SDK   SDK_STATUS      _stdcall INFSMART_Phoenix_Enable(HANDLE hDevice, unsigned int baud, unsigned int * ActualBaud, unsigned char stopbit, unsigned char parity, unsigned char databits, unsigned int dwFrq, unsigned int PhRunningFrq, bool updateonly);
Delphi:
Delphi-Quellcode:
TINFSMART_Phoenix_Enable = function (hDevice: THandle;
                                 baud: DWORD;
                                 ActualBaud: PDWORD;
                                 stopbit: Byte;
                                 parity: Byte;
                                 databits: Byte;
                                 dwFrq: DWORD;
                                 PhRunningFrq: DWORD;
                                 updateonly: Bool): SDK_STATUS; stdcall;
Sollte so passen, oder?
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 23:23 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