Drucker setzen crasht ~.~



  • ahoi.

    Ich habe eine TListBox wo alle installierten Drucker aufgelistet werden.
    Ich wähle jetzt einen der Einträge aus und drücke einen Button zum setzen des Druckers

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	try
    	{
    		char p_drv[MAX_PATH], p_port[MAX_PATH];
    		THandle devm;
    		Printer()->GetPrinter( ListBox1->Items->Strings[ListBox1->ItemIndex].c_str(), p_drv, p_port, devm );
    		Printer()->SetPrinter( ListBox1->Items->Strings[ListBox1->ItemIndex].c_str(), p_drv, p_port, devm );
    	}
    	catch(...)
    	{
    		ShowMessage("Error");
    	}
    }
    

    In der ListBox stehen 3 Einträge:
    \\Nicht_mehr_existierende_Netzwerk\\Fritzfax Drucker
    \\Netzwerk\hp deskjet 990c series
    \\Anderes_Netzwerk\hp deskjet 5100 series

    So ich markiere nun Index 1 und drücke Button1, dann crasht er mit Zugriffsverletzung. Wieso ich habe doch das in einer try 😕

    Markiere ich Index 2 und drücke Button1, dann funzt es...
    ...markiere ich anschliessend Index 3 und drücke Button1 funktioniert es auch.

    Markiere ich aber anschliessend Index 2 so crasht er anschliessend wieder mit Zugriffsverletzung 😮

    Das es funktioniert sehe ich daran das im DruckerDialog der jeweilige Drucker ausgewählt wurde.

    Das er bei Index 1 einen Fehler geben muss verstehe ich, aber wieso trotz try abstürz?
    Und wieso kommt ein Fehler wenn ich von Index 3 auf Index 2 zurück gehe? 😞



  • Hi,

    das mit dem try funtzt wenn du deine anwendung außerhalb der ide ausführst.

    kevin



  • Stimmt^^.

    Aber er beendet dann auch das ganze Programm ... verschwindet einfach.
    Und warum von Index 3 auf Index 2 es abstürzt erlärt das nun auch nicht.



  • argh! Kann nicht editieren 🙄

    Es kommt beim absturz KEINE ShowMessage()! Das sollte doch aber wohl oder nicht?



  • Wo knallt er denn?
    Codezeile?



  • Ich setze nur Printer()->Printerindex=[i]ListenIndex[/i];

    Der Index kommt aus der Liste - da les ich beim Start alle Drucker ein.


Anmelden zum Antworten