Direct3d aus Matlab raus - Fenster wird nicht angezeigt



  • Nachdem meine erste Frage hier schon sehr gut beantwortet wurde (vielen Dank nochmal dafür) nun die Nächste:
    Ich habe mir das Tutorial 6 von Microsoft zu D3D10 genommen und für mich etwas umgeschrieben. Mit Visual Studio 2010 funktioniert es alles problemlos.
    Nun will ich das Programm aber mit Daten aus Matlab füttern. Dazu habe ich es als MEX-Funktion umgeschrieben und starte es aus Matlab heraus. Compiler ist weiterhin Visual Studio 2010. Nach einigen Probleme kompiliert es jetzt.
    Das aktuelle Problem ist, dass ich von Matlab keine HINSTANCE übergeben kriege.
    Diese hole ich mir jetzt über GetModuleHandle (0);
    Das Programm läuft ganz normal - habe ich mit Testausgaben überprüft. Nur das Zeichenfenster erscheint nicht.

    Hat irgendwer vielleicht ne zündende Idee, woran das liegen könnte? Kann ich die HINSTANCE irgendwie überprüfen?

    Hier die entscheidenden Teile des Codes:
    In der Matlab-Einstiegsfunktion:

    HINSTANCE hInst= GetModuleHandle (0);
    	main(hInst);
    

    Meine Mainfunktion:

    int main(HINSTANCE hInstance)
    {
    	int nCmdShow=0;
    	width=800;
    	height=600;
    	mousedown=0;
    	printf("vor initwindow\n");
        if( FAILED( InitWindow( hInstance, nCmdShow ) ) )
            return 0;
    	printf("nach initwindow\n");
        if( FAILED( InitDevice() ) )
        {
            CleanupDevice();
            return 0;
        }
    	printf("nach initdevice\n");
    
        // Main message loop
        MSG msg = {0};
        while( WM_QUIT != msg.message )
        {
            if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
            {
    
    			if(msg.message==WM_LBUTTONUP && mousedown==1){
    				mousedown=0;					
    			}
    
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
            else
            {
    				mexErrMsgTxt("vor Render");
                Render();
            }
        }
    		mexErrMsgTxt("nach MessageLoop");
    
        CleanupDevice();
    
        return ( int )msg.wParam;
    }
    

    Vielen Dank schonmal im Voraus.
    Gustav



  • Habe den Fehler selber gefunden:
    ShowWindow hatte als nCmdShow NULL bekommen (habe ich was sezten müssen, da ja nix kam) - nach ersetzen durch:

    ShowWindow( g_hWnd, SW_SHOW );
    

    Wird das Fenster jetzt angezeigt.


Anmelden zum Antworten