Avatar billede skovjuul Nybegynder
12. marts 2008 - 18:16 Der er 4 kommentarer og
1 løsning

Fange min egen exception

Hola

Jeg har lagt disse to indlæg sammen i mit program
http://www.eksperten.dk/spm/321445 og http://www.eksperten.dk/spm/231933 så alle mine exceptions havner i en TMemo.
Mit problem er at jeg ikke kan få min egen exception i memo-boksen. Det er lige som om den ikke når ned i selve except delen hvor jeg har lavet min egen raise-besked.
Når jeg bruger E.message i MinEgenExceptionfanger så er det bare en generisk access violation der bliver vist. Hvordan kan jeg få min egen tekst herover så jeg kan skelne på fejlene?

håber det giver mening ellers må I sige til.

Hygge
Jesper
Avatar billede hrc Mester
13. marts 2008 - 07:45 #1
Er det sådan noget du efterspørger?

type
  EMyException = class(Exception);

...

procedure MyFunction(const aFilename: string);
begin
  if not FileExists(aFilanme) then
    raise EMyException.Create('Filnavn skal angives');
  ...
end;

try
  MyFunction('c:\win.com');
except
  on e: EMyException do
    MessageDlg(e.Message,mtError,[mbOK],0);
end;

try
Avatar billede skovjuul Nybegynder
13. marts 2008 - 10:55 #2
Desværre ikke... jeg viser lige lidt kode så forklarer jeg yderligere til sidst. Jeg har bl.a.:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := MyOwnException;
end;

procedure TForm1.MyOwnException(Sender: TObject; E: Exception);
begin
  mLog.Lines.Add(FormatDateTime('dd"/"mm hh:nn',Now)+': '+E.Message);
end;

procedure TForm1.DoFtpSendPict;
var
  Save_Cursor: TCursor;
  FolderString : string;
  I : integer;
  ftpBilledeKlient: TIdFTP;
begin
  Save_Cursor := Screen.Cursor;
  ftpBilledeKlient := TIdFTP.Create(self);
  try
    try
      Screen.Cursor := crHourGlass;
      ftpBilledeKlient.Host := eBilledeHost.Text;
      ftpBilledeKlient.Username := eBilledeUsername.Text;
      ftpBilledeKlient.Password := eBilledePassword.Text;
      ftpBilledeKlient.Port := seBilledePort.Value;
      ftpBilledeKlient.Connect;  // <-- HVIS DENNE FEJLER KOMMER ACCESS VIOLATION
      for I := 1 to Length(eBilledeModtagerFolder.Text) do begin
      //Denne kode bliver kaldt for, hver bogstav
        if eBilledeModtagerFolder.Text[I] <> '\' then begin
          FolderString := Folderstring + eBilledeModtagerFolder.Text[I];
        end
        else begin
          ftpBilledeKlient.ChangeDir(FolderString);
          FolderString := '';
        end;
      end;
      ftpBilledeKlient.Put(eBilledeFilename.Text,eBilledeModtagerFil.Text,false);
    except
      raise exception.create('Fejl i forbindelse med upload af billede');
    end;
  finally
    Screen.Cursor := Save_Cursor;
    ftpBilledeKlient.DisconnectNotifyPeer;
    ftpBilledeKlient.Free;
  end;
end;

----------
Hvis ftpBilledeKlient.Connect; fejler så logger den en access violation uden om min egen exception, den springer simpelthen ud af funktionen på det sted. Men hvis f.eks. er ftpBilledeKlient.Put der fejler så bliver min exception kaldt fint nok. Hvordan kan det være?
Avatar billede hrc Mester
13. marts 2008 - 14:09 #3
Så noget kode dybt inde i VCL-en og der var kode 11 (=A.V.) en situation som blev håndteret anderledes de andre exceptions. Hvordan man løser det ved jeg umiddelbart ikke.

Hvad med at prøve installere Madshi? Det er en smart komponentpakke der fanger exceptions og pakker stakken, processerne, uniten (incl. linjenumre) som fejlen opstod i. Du kan smække komponenten på og via den fange og håndtere/"sende videre" alle de exceptions der sker. En ret nyttig pakke.

Skal gerne sende dig et eksempel på hvordan jeg hægter yderligere supportdata på når mit program (ganske sjældent ...) genererer en fejl.
Avatar billede skovjuul Nybegynder
13. marts 2008 - 18:39 #4
Tak for det hrc, så vigtigt er det heller ikke, bare en lille applikation til svigerfar. Men meget godt link, kan være jeg skal kigge på det senere.
Smid et svar så får du point.

Noget andet, kan man sende private beskeder herinde?
Avatar billede hrc Mester
14. marts 2008 - 09:35 #5
Private meddelelser tror jeg ikke er muligt i dette fora. Du kan skrive til mig på hotmail via "hrc_public" (jeg forsøger altid camouflere min adresse for at undgå mail-støvsugende robotter fra spammerne)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester