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.


Anmelden zum Antworten