AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit dynamischem Array[erledigt]

Ein Thema von tr909 · begonnen am 1. Sep 2006 · letzter Beitrag vom 1. Sep 2006
Antwort Antwort
tr909

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

Probleme mit dynamischem Array[erledigt]

  Alt 1. Sep 2006, 10: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
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Probleme mit dynamischem Array

  Alt 1. Sep 2006, 10:54
Dynamische-Array-Variablen enthalten selbst nur Pointer, du wirfst also einen Pointer auf einen Pointer in die Funktion. Versuch es mal mit
@Datei[0] // Zeiger auf das erste Element des dynamischen Arrays PS: Warum SetLength(Datei,AttachedFileName.Count+1) ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#3

Re: Probleme mit dynamischem Array

  Alt 1. Sep 2006, 10:54
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

@Count+1

weil der letzte Eintrag 0 sein muß, als Listenabschluß
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
tr909

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

Re: Probleme mit dynamischem Array

  Alt 1. Sep 2006, 11:00
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ß )

Besten Dank
tr909
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz