![]() |
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:
Gruß
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; tr909 |
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:
PS: Warum SetLength(Datei,AttachedFileName.Count+1) :gruebel: ?
@Datei[0] // Zeiger auf das erste Element des dynamischen Arrays
|
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:
[edit]
lpFiles := @Datei[b][color=#ff0000][0][/color][/b];
zu langsam :wall: @Count+1 weil der letzte Eintrag 0 sein muß, als Listenabschluß :mrgreen: |
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