Thema: Delphi Delphi 2009 und Packages

Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#16

Re: Delphi 2009 und Packages

  Alt 24. Mai 2009, 21:17
Zitat von KEK:
Frage -- wo ist der Unterschied ?
Delphi-Quellcode:
    FBodyText := Body.Text;
    AnsiSubject := AnsiString(FSubject);
    AnsiBody := AnsiString(FBodyText);

    FillChar(FMapiMessage, SizeOf(FMapiMessage), #0);
    FMapiMessage.lpszSubject := PAnsiChar(AnsiSubject);
    FMapiMessage.lpszNoteText := PAnsiChar(AnsiBody);
    FMapiMessage.lpRecips := PMapiRecipDesc(FRecipArray);
    FMapiMessage.nRecipCount := Length(FRecipArray);
    FMapiMessage.lpFiles := PMapiFileDesc(FAttachArray);
    FMapiMessage.nFileCount := Length(FAttachArray);

/////// alt
    FMapiMessage.lpszSubject := PAnsiChar(AnsiString(FSubject));
    FMapiMessage.lpszNoteText := PAnsiChar(AnsiString(FBodyText));
    FMapiMessage.lpRecips := PMapiRecipDesc(FRecipArray);
    FMapiMessage.nRecipCount := Length(FRecipArray);
    FMapiMessage.lpFiles := PMapiFileDesc(FAttachArray);
    FMapiMessage.nFileCount := Length(FAttachArray);
Es gibt hier keinen.

Zitat:
auch in CreateRecips kann ich keinen wirklichen Unterschied sehen
In CreateRecips gibt es einen Unterschied. Und zwar ist hier eine Schleife im Spiel. Ein "PAnsiChar(AnsiString(S))" führt dazu, dass der Compiler eine temporäre AnsiString Variable (auf dem Stack) anlegt. Der PAnsiChar zeigt dann auf diesen AnsiString und so tut lpszAddress. Beim nächten Schleifendurchlauf wird diese temporäre Variable erneut benutzt und enthält nun einen anderen String. Dummerweise zeigt lpszAddress des vorherigen Array-Elements bereits auf den alten String der nun nicht mehr existiert.
  Mit Zitat antworten Zitat