Fehler beim Zugriff auf global deklarierte Variablen

Arne Buchwald

Erfahrenes Mitglied
Hallo,

ich habe ein eigentlich simples Problem, dass mir fast den Verstand raubt. Zumindestens bin ich mit meinem Latein gänzlichst am Ende. :confused:

Ich poste erst einfach mal Ausschnitte des Codes:
Code:
type
  TWM = class(TWebModule)
   [...]
    function eMail(Senderemail, Sendername, Empfaenger, EmpfaengerCC, betreff, emessage: string; Priority: integer): Boolean;
    function GenerateWelcomeMessage(username, password, email, key, FileName: string): Boolean;
    function eMailConnStart: string;
    function eMailConnStop: string;
    [...]
Code:
private
    { Private-Deklarationen }
    smtpauthtype: integer;
    smtphost: string;
    smtpuserid: string;
    smtppasswort: string;
    smtpport: integer;
    absender: string;
    absendername: string;
    pop3host: string;
    pop3userid: string;
    pop3passwort: string;
    pop3port: integer;
Code:
function TWM.GenerateWelcomeMessage(username, password, email, key, FileName: string): Boolean;
var 
  log: TStringList;
begin
  Result:= True;
 
    […]

    log := TStringlist.Create;
    log.add(email + #13#10 + #13#10 + Absender + #13#10 + #13#10 + Absendername + #13#10 + #13#10 + WelcomeSubject + #13#10 + #13#10 + temp_file);
    log.SaveToFile(ExtractFilePath(paramstr(0))+'error_generate.txt'); 

    if WM.eMail(Absender, Absendername, eMail, '', WelcomeSubject, temp_file, 3) = False then Result:= False;
  except
    Result:= False;
  end;
end;

Aus der Funktion GenerateWelcomeMessage rufe ich die Funktion eMail auf. Aus der Funktion GenerateWelcomeMessage kann ich ohne Fehler auf global deklarierte Variablen zugreifen, aus der Funktion eMail jedoch nicht. D.h. es klappt nicht nur der Zugriff auf diese Variablen nicht, sondern kann ich aus dieser Funktion ebenfalls nicht auf Komponenten, die im WebModul liegen, zugreifen.
Code:
function TWM.eMail(Senderemail, Sendername, Empfaenger, EmpfaengerCC, betreff, emessage: string; Priority: integer): Boolean;
var log2: TStringList;
begin
  Result:= True;

  log2 := TStringlist.Create;
    try
      with WM.IdMsgSend do
      begin
//        Body.Text:= emessage;
        From.Text := Senderemail;
//        Recipients.EMailAddresses := Empfaenger;
//        Subject := betreff;
//        Priority := TIdMessagePriority(Priority);
//        CCList.EMailAddresses := EmpfaengerCC;
//        BccList.EMailAddresses := '';
//        ReceiptRecipient.Text := Sendername;
      end;
//      SMTP.Send(IdMsgSend);
    except
      Result := False;
    end;
  log2.add('Body: ' + emessage + #13#10 + #13#10);
//                          aa
  log2.add('From.Text: ' + Senderemail + #13#10 + #13#10);
//  log2.add('Recipients: ' + scripturl + #13#10 + #13#10);
  log2.add('Recipients: ' + Empfaenger + #13#10 + #13#10);
  log2.add('Subject: ' + betreff + #13#10 + #13#10);
  log2.add('priority: ' + IntToStr(priority) + #13#10 + #13#10);
  log2.add('CC: ' + empfaengerCC + #13#10 + #13#10);
  log2.add('ReceiptRecipient: ' + Sendername + #13#10 + #13#10);

  log2.SaveToFile(ExtractFilePath(paramstr(0))+'error_func_email.txt');
end;

Kann damit jemand etwas anfangen / mir helfen ??

Wie gesagt - ich kann diese Fehlfunktion des Programmes nicht nachvollziehen ...
 

Arne Buchwald

Erfahrenes Mitglied
Nein, nein, das war beabsichtigt. Allerdings habe ich den Fehler jetzt endlich gefunden. :) - Puh, hat auch lange genug gedauert.

Ich hatte (keine Ahnung warum) mir kurz eine Funktion test
Code:
function TWM.test(a: string): Boolean;
var s: string;
begin
  s:= eMail();
end;
angelegt und auf einmal zeigte Delphi mir ganz normal die erwarteten Parameter der Funktion eMail. *staun*
Dann habe ich die Parameter von GenerateWelcomeMessage an die Funktion test angehängt und diese da, es ging nicht.
Stück für Stück immer einen Parameter mehr und da viel mir auf, dass eMail redefiniert ist, d.h. dass auch eine Funktion eMail existiert.

Tja, das kurz geändert und schwups, alles ging. :)
Kann scheinbar ja auch nicht soo einfach gewesen sein, da ja auch niemand anderes drauf kam. Insofern ... :)