Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit dynamischem Array[erledigt] (https://www.delphipraxis.net/76280-probleme-mit-dynamischem-array%5Berledigt%5D.html)

tr909 1. Sep 2006 11:43


Probleme mit dynamischem Array[erledigt]
 
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

Khabarakh 1. Sep 2006 11:54

Re: Probleme mit dynamischem Array
 
Dynamische-Array-Variablen enthalten selbst nur Pointer, du wirfst also einen Pointer auf einen Pointer in die Funktion. Versuch es mal mit
Delphi-Quellcode:
@Datei[0] // Zeiger auf das erste Element des dynamischen Arrays
PS: Warum SetLength(Datei,AttachedFileName.Count+1) :gruebel: ?

himitsu 1. Sep 2006 11:54

Re: Probleme mit dynamischem Array
 
Bei dynamischen Arrays ist die Variable iein Pointer auf die Stuktur und mit :=@Datei übergibst du nur den Pointer und nicht das Array.

Code:
lpFiles := @Datei[b][color=#ff0000][0][/color][/b];
[edit]
zu langsam :wall:

@Count+1

weil der letzte Eintrag 0 sein muß, als Listenabschluß :mrgreen:

tr909 1. Sep 2006 12:00

Re: Probleme mit dynamischem Array
 
Sowas habe ich mir schon gedacht. mit @Datei[0] funktioniert es wunderbar, auch wenn ich es nicht so ganz verstehe. (ist bei der adresse auch die größe des arrays hinterlegt? *edit* oder weil der letzte eintrag 0 ist, als Listenabschluß :gruebel: )

Besten Dank
tr909


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz