Zugriffsverletzung wenn ich Programm per DblClick auf Datei starte



  • Hallo,

    ich habe mir einen Dateityp registriert, bei dem bei DblClick mein Programm gestartet wird!

    Schön und gut, das hat auch funktioniert, allerdings bekomme ich zugriffsverletzung:

    if(ParamStr(1).Pos(".vnf")>0 || ParamStr(1).Pos(".VNF")>0)   //nur .vnf - Dateien laden
     {
        Application->ProcessMessages();
        if(frmSplash)
         frmSplash->Label1->Caption = "Loading external file";
    
        Application->ProcessMessages();
        Form1->Show();               
        //ShowMessage(ParamStr(1));
        Form16 = new TForm16(Application);
    
        Form16->RichEdit1->Lines->LoadFromFile(ParamStr(1));
        Form16->RichEdit1->ReadOnly = true; 
    
        Form16->MainMenu1->Items->Items[0]->Enabled=false;
        Form16->MainMenu1->Items->Items[1]->Enabled=false;
        Form16->MainMenu1->Items->Items[2]->Enabled=false;
        Form16->Caption = "Notizen für " + String(ExtractFileName(ParamStr(1)));
        Form16->Show();
     }
    

    so,

    Form16 gehört mit zum Programm, wurde mit formulardesigner hinzugefügt!
    frmSplash ist ein Splashscreen (mögliche Fehlerquelle da dieser im FormCreate-Event des Form1 benutzt wird)

    CodeGuard-Bericht:

    Error 00001. 0x100600 (Thread 0x0DA8):
    Access in invalid memory: Attempt to access 4 byte(s) at 0x00000000+784.
    Call Tree:
       0x0040B652(=Main.exe:0x01:00A652)
       0x0051F715(=Main.exe:0x01:11E715)
       0x00534434(=Main.exe:0x01:133434)
       0x005340AF(=Main.exe:0x01:1330AF)
       0x004C880A(=Main.exe:0x01:0C780A)
       0x77D18709(=USER32.DLL:0x01:007709)
    

    der kam einmal, und der:

    Fehler 00001. 0x300010 (Thread 0x130C):
    Ressourcenleck: Objekt (0xDD5F84) war nie Gelöscht
    
    Objekt (0x00DD5F84) [Größe: 72 Byte] war erstellt mit new
    Aufrufhierarchie:
       0x00403ECF(=Main.exe:0x01:002ECF) D:\VDA_REMAKE\Funktionen_in_DLL2\main_code.cpp#36
       0x00440E60(=Main.exe:0x01:03FE60)
       0x00473924(=Main.exe:0x01:072924)
       0x0047359F(=Main.exe:0x01:07259F)
       0x00419BFE(=Main.exe:0x01:018BFE)
       0x77D18709(=USER32.DLL:0x01:007709)
    

    Zeile 36 wäre das vom Editor erzeugte

    TForm1 *Form1;
    

    kann mir jmd helfen?



  • Setze doch mal einen Breakpoint in den OnCreate-Event deiner Form. Beim Menü Start/Parameter vom Builder kannst du die zu öffnende Datei mit eintragen, damit du den Test aus der IDE heraus machen kannst. Existiert denn frmSplash überhaupt? Ist der Pointer defaultmäßig auf 0 gesetzt?



  • kannst du mir bitte erklären wie ich das mit dem parameter mache und wie ich dann die sache aus der IDE heraus starte?

    Ja frmSplash existiert!



  • Im BCB unter Start->Parameter kannst Du die zu übergebenden Parameter angeben.



  • Was in deinem Fall der Name (mit kompletten Pfad) der Datei ist auf die du doppelt klicken willst. Dann einfach dein Programm vom Builder aus starten.


Anmelden zum Antworten