Fensterklasse über DLL erstellen
-
Ich möchte die Fensterklassenerstellung von einer DLL aus aufrufen.
Die DLL wurde kompiliert, aber wenn ich diese Prozedur von einem Programm aus aufrufe, wird das Programm zwar kompiliert, aber das Fenster wird nicht angezeigt. Die DLL habe ich schon ins Programmverzeichnis kopiert.Hier ist die Fensterklassenerstellungsprozedur.
EXPORT void CALLBACK WindowObjectRegister(LPTSTR ClassName, LPTSTR Name, WNDCLASSEX WindowClass, WNDPROC StandardWndProc) { ClassName = Name; WindowClass.lpszClassName = ClassName; WindowClass.lpfnWndProc = StandardWndProc; WindowClass.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS; WindowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WindowClass.hCursor = LoadCursor(0, IDC_ARROW); WindowClass.cbSize = sizeof(WindowClass); WindowClass.cbClsExtra = 0; WindowClass.cbWndExtra = 0; RegisterClassEx(&WindowClass); }
-
Wie kommst Du darauf das damit ein Fenster erstellt und angezeigt wird?
Lies Dich mal hier ein bisschen ein.
http://www.functionx.com/win32/Lesson01c.htm
-
Das ist nur eine Prozedur. Natürlich habe ich noch andere Prozeduren und natürlich auch die WindowProcedure. Trotzdem funktioniert es nicht.
-
Wie sieht es den mit hInstance aus?
-
Man kann alles oder fast alles in eine DLL verlagern, auch die Festlegung von Fensterklassen. Nur das Fenster muss noch geöffnet werden. Wer soll das machen, die DLL oder die Anwendung? Bitte mitteilen, dann sehen wir weiter!
-
Na gut! Die Sache hat sich schon geklärt.
Es lag an folgender Zeile.
ClassName = Name;
Wenn ich die im Programm direkt integriert wäre, dann würde sich das Fenster öffnen. Nun musste ich aber feststellen, dass es ziemlich umständlich ist, die Prozeduren ohne Klassen in eine DLL zu verpacken, gerade für so einen WinAPI-Wrapper. Ich habe mich schonmal erkundigt, wie man Klassen in eine DLL packt, aber irgendwie funktioniert dies nicht.
// library.h #define DllImport __declspec( dllimport ) #define DllExport __declspec( dllexport ) #include <windows.h> class DllExport TObject;
// library.cpp #include "library.h" int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { return 1; } class DllExport TObject { ... };
// test.cpp #include "library.h" class DllImport TObject; ...
Also, meine Entwicklungsumgebung ist C++ Builder 2010.
Die library.cpp hat sich kompilieren lassen, aber die test.cpp hat sich nicht kompilieren lassen, da andere Klassen von TObject abhängig sind, jedoch wird TObject nicht gefunden. Die library.lib habe ich schon ins Projekt eingebunden.
Ich weiß, dass ich die ganzen Wrapperklassen auch ohne DLL schreiben könnte, aber falls ich diese Wrapperklassen irgendwann mal weitergebe, will ich nicht, dass man den Wrappercode beliebig abändern kann.