Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateWindow in einer DLL.... (https://www.delphipraxis.net/68278-createwindow-einer-dll.html)

Tyrael Y. 27. Apr 2006 10:34


CreateWindow in einer DLL....
 
Hallo zusammen,

ich benutze folgenden Code einmal innerhalb einer DLL und
einmal innerhalb einer Testapplikation.
Innerhalb der DLL wird das Fenster nicht erzeugt (CreateWindow gibt kein Handle zurück)
Innerhalb der Testapplikation läuft der Code einwandfrei.

Hat einer vielleicht eine Idee woran es liegt?

P.S.: Das Fenster bleibt unsichtbar und dient nur als ein Message-Empfänger(bei
beiden Versionen).

Delphi-Quellcode:
procedure CreateCommandWindow();
var LWndClassStruct: TWndClass;
begin
 
  LWndClassStruct.style := 0;
  LWndClassStruct.lpfnWndProc := @DoOnCommand;
  LWndClassStruct.cbClsExtra := 0;
  LWndClassStruct.cbWndExtra := 0;
  LWndClassStruct.hInstance := HInstance;
  LWndClassStruct.hIcon := 0;
  LWndClassStruct.hCursor := 0;
  LWndClassStruct.hbrBackground := 0;
  LWndClassStruct.lpszMenuName := nil;
  LWndClassStruct.lpszClassName := PAnsiChar('MeinKlassenName');

  if Windows.RegisterClass(LWndClassStruct) <> 0 then
  begin
    WindowHandle := Windows.CreateWindow(PAnsiChar('MeinKlassenName'),
                          PAnsiChar('MeinFensterName'),
                          0,0,0,0,0, 0, 0, HInstance,nil);
  end
  else
    ...
Danke euch.
Gruß Tyrael

Robert Marquardt 27. Apr 2006 10:39

Re: CreateWindow in einer DLL....
 
Ich sehe jetzt kein unmittelbares Problem.
Ab Delphi 6 kann man auch Classes.AllocateHWnd nehmen. Vorher war es in Forms und zog einem die ganze VCL in die DLL.

Tyrael Y. 27. Apr 2006 10:51

Re: CreateWindow in einer DLL....
 
Hm, Classes.AllocateHWnd hört sich gut an, da hab ich nur jetzt das Problem, daß es einen procedure of object erwartet, ich habe aber kein Object innerhalb dieses Plugins (nur eins, daß für Threads zuständig ist, aber das kann ich dafür nicht nutzen)

Robert Marquardt 27. Apr 2006 11:57

Re: CreateWindow in einer DLL....
 
Na dann schreib dir doch eins. Einfach eine TObject-Ableitung mit der Methode.
Du kannst ja auch mal probieren ob nicht eine class procedure funktioniert, dann brauchst du nicht mal eine Objektinstanz.
Delphi-Quellcode:

type
  TWndObject = class(TObject)
  public
     class procedure WndProc(var Msg: TMessage);
  end;

procedure TWndObject.WndProc(var Msg: TMessage);
begin
end;

Tyrael Y. 27. Apr 2006 12:46

Re: CreateWindow in einer DLL....
 
Das Problem mit Classes.AllocateHWnd ist, daß ich damit ein gültiges Fenster erzeugt kriege, es aber nicht mit einem anderen Programm identifizieren kann.

Das Fenster soll Nachrichten aus einer CommandLine-Applikation erhalten.
Bisher geh ich so vor, daß ich im CommandLine-Programm anhand des von mir festegelegten
Klassennamen und Fensternamen, mittels FindWindow, das Fenster finde und genau an dieses Fenster einen Windows-Nachricht schicke (WM_COPYDATA).

AllocateHwnd erzeugt mir ein Fenster von dem ich weder Klassennamen noch Fensternamen kenne. Ok der Klassenname steht ja in der Funktion selbst, aber der ist halt allgemein und
identifiziert mein Fenster nicht eindeutig.

Robert Marquardt 27. Apr 2006 12:50

Re: CreateWindow in einer DLL....
 
Warum pluenderst du dann nicht die Delphi-Sourcen?

Tyrael Y. 27. Apr 2006 13:32

Re: CreateWindow in einer DLL....
 
Hab ich jetzt gemacht, hab sie aus der Classes Unit genommen den Namen verändert und es an meine Bedürfisse angepasst.....funktioniert

Danke dir Robert :thumb:

P.S.: Klassen-Prozedur muss es nicht sein, geht auch so


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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