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.