Einzelnen Beitrag anzeigen

tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#1

Probleme mit dynamischem Array[erledigt]

  Alt 1. Sep 2006, 11:43
Ich habe aus verschiedenen Quellen a.u. SendMail-function zusammengebastelt und so umgebaut, das man auch Mails mit mehreren Anhängen versenden kann. Nun habe ich folgendes Problem.
Das Array Datei soll dynamisch werden, also habe ich die Deklaration in :
Datei : array of TMapiFileDesc; geändert und zu begin das Array initialisiert mit SetLength(Datei,AttachedFileName.Count+1)
Die funktioniert so weit auch ganz gut, nur wenn ich die Funktion aufrufe passiert Nichts.
Lass ich SetLength weg und deklariere das Array direkt mit z.b. [0..10] kann ich problemlos bis zu 10 Anhänge dranhängen (halt nur nichtmehr ).

Kann es sein das es an der stelle
lpFiles := @Datei;
zu problemen mit dem dynamischen Array kommt?

Delphi-Quellcode:
function SendMail(Subject, Mailtext,
  FromName, FromAdress,
  ToName, ToAdress: string;
  AttachedFileName: TStrings;
  ShowDialog: boolean): integer;
var
  MapiMessage: TMapiMessage;
  MError: Cardinal;
  Empfaenger: array[0..1] of TMapiRecipDesc;
  Absender: TMapiRecipDesc;
  Datei: array[0..1] of TMapiFileDesc;
  i: integer;
begin
  
  with MapiMessage do begin
    ulReserved := 0;

    // Betreff
    lpszSubject := PChar(Subject);

    // Body
    lpszNoteText := PChar(Mailtext);

    lpszMessageType := nil;
    lpszDateReceived := nil;
    lpszConversationID := nil;
    flFlags := 0;

    // Absender festlegen
    Absender.ulReserved := 0;
    Absender.ulRecipClass := MAPI_ORIG;
    Absender.lpszName := PChar(FromName);
    Absender.lpszAddress := PChar(FromAdress);
    Absender.ulEIDSize := 0;
    Absender.lpEntryID := nil;
    lpOriginator := @Absender;

    // Empfänger festlegen (Hier: nur 1 Empfänger)
    nRecipCount := 1;
    Empfaenger[0].ulReserved := 0;
    Empfaenger[0].ulRecipClass := MAPI_TO;
    Empfaenger[0].lpszName := PChar(ToName);
    Empfaenger[0].lpszAddress := PChar(ToAdress);
    Empfaenger[0].ulEIDSize := 0;
    Empfaenger[0].lpEntryID := nil;
    lpRecips := @Empfaenger;

    // Dateien anhängen (Hier: Geändert für mehrer Dateien)
    nFileCount := AttachedFileName.Count;
    for i := 0 to AttachedFileName.Count - 1 do
    begin
    // Name der Datei auf der Festplatte
      Datei[i].lpszPathName := PChar(AttachedFilename[i]);
    // Name, der in der Email angezeigt wird
      Datei[i].lpszFileName := nil;
      Datei[i].ulReserved := 0;
      Datei[i].flFlags := 0;
      Datei[i].nPosition := 0;
      Datei[i].lpFileType := nil;
    end;
    lpFiles := @Datei;

  end;
  if ShowDialog then
    MError := MapiSendMail(0, Application.Handle,
      MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI, 0)
  else
    MError := MapiSendMail(0, Application.Handle, MapiMessage, 0, 0);
  result := MError;
end;
Gruß
tr909
  Mit Zitat antworten Zitat