Problem beim Windows Messages bei CreateWindowEx und RegisterClass!
-
Hallo zusammen,
ich habe ein Problem mit dem folgenden Quellcode. Ziel ist es Funktionen aufzurufen, die dann Messages erstellen wenn sie abgearbeitet wurden. Das Senden der Message funktioniert einmal, leider aber in der nächsten Funktion schon nicht mehr. Die Umgebung ist ein CUnit Testprogramm, welches die Testmethoden nacheinander abarbeitet.
Den Quellcode habe ich hoffentlich gut dokumentiert:
#include "stdafx.h" #include "XFSAPI.H" #include "XFSIDC.H" #include "XFSPIN.H" using namespace System; using namespace System::Text; using namespace System::Collections::Generic; using namespace Microsoft::VisualStudio::TestTools::UnitTesting; namespace XFS_CUnit_Test { // Class that handles XFS events LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { //... return 0L; }; [TestClass] public ref class UnitTest_PIN { private: TestContext^ testContextInstance; static HWND hWnd; // Speichert das Handle von CreateWindowEx public: // Diese Methode wird als erstes aufgerufen: [ClassInitialize()] static void PINInitialize(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext tc) { ... // register event classes WNDCLASS wndClass; wndClass.style = 0; wndClass.lpfnWndProc = windowProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = NULL; //hInstance; wndClass.hIcon = NULL; wndClass.hCursor = NULL; wndClass.hbrBackground = NULL; wndClass.lpszMenuName = NULL; wndClass.lpszClassName = "Example"; // Name used in call to CreateWindowEx // register the window class hRes = RegisterClass(&wndClass); // create a window to receive the events hWnd = CreateWindowEx(0, "Example", "ExampleWindow", WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL); // register for XFS Events DWORD dwEventClass = SERVICE_EVENTS | USER_EVENTS | SYSTEM_EVENTS | EXECUTE_EVENTS; LPREQUESTID lpRequestID; unsigned long reqID = 0; lpRequestID = &reqID; if (hRes = WFSAsyncRegister(hService, dwEventClass, hWnd, hWnd, lpRequestID) != WFS_SUCCESS) { System::Console::WriteLine("WFSRegister failed..."); return; } // Dieses Kommando erzeugtkorrekt ein Event! }; [TestMethod] void getInfo() { ... if(hRes = WFSAsyncGetInfo( hService, WFS_INF_PIN_STATUS, NULL, dwTimeOut, hWnd, lpRequestID ) != WFS_SUCCESS) { System::Console::WriteLine("WFSAsyncGetInfo failed..."); Assert::Fail(); } // Diese Methode sendet kein Event mehr! };
Falls ich die Funktion WFSAsyncGetInfo direkt nach der Funktion WFSAsyncRegister aufrufe wird auch ein Event erzeugt.
Wie schaffe ich es, dass es auch weiterhin Events gibt? Ich glaube die Objekte gehen verloren wenn die Funktion PINInitialize verlassen wird
Vielen Dank für Eure Hilfe.
Keks
-
Noch ein Zusatz:
Wenn ich die Funktionen RegisterClass und CreateWindowEx wieder neu in der Funktion void getInfo() aufrufe, ist das Verhalten leider auch nicht anders.