![]() |
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:
Danke euch.
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 ... Gruß Tyrael |
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. |
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)
|
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; |
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. |
Re: CreateWindow in einer DLL....
Warum pluenderst du dann nicht die Delphi-Sourcen?
|
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