Delphi MapiSendMail在Windows 7 64位上崩溃

时间:2011-03-18 04:01:09

标签: delphi mapi windows-7-x64 mapisendmail

我有64位Windows 7和我的delphi sendmail在尝试第二次发送电子邮件时崩溃,有时甚至只是等待第一封发送邮件完成。相同的应用程序适用于Windows Vista。

以下是我发送邮件时的测试程序:

procedure TForm1.SendMail(const Subject, FileName: String);
var tmpName2, PFullFilePath, PSubject : Array[0..MAX_PATH] of AnsiChar;
    MapiMessage  : TMapiMessage;
    MapiFileDesc : TMapiFileDesc;
    MError       : Cardinal;
begin
  with MapiFileDesc do
  begin
     ulReserved:=0;
     flFlags:=0;
     nPosition:=Cardinal(-1);
     StrPCopy(PFullFilePath, FileName);
     lpszPathName:=PFullFilePath;
     StrPCopy(tmpName2,ExtractFileName(FileName));
     lpszFileName:=tmpName2;
     lpFileType:=nil;
   end;

   with MapiMessage do
   begin
      ulReserved := 0;
      StrPCopy(PSubject, Subject);
      lpszSubject := PSubject;
      lpszNoteText := nil;
      lpszMessageType := nil;
      lpszDateReceived := nil;
      lpszConversationID := nil;
      flFlags := 0;
      lpOriginator := nil;
      nRecipCount := 0;
      lpRecips := nil;
      nFileCount := 1;
      lpFiles := @MapiFileDesc;
   end;

   MError:=MapiSendMail(0,Application.Handle, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);

   if MError<>0 then
      Raise Exception.CreateFmt(IntToStr(MError), [MError]);
end;

我得到的错误/崩溃消息:

  

问题签名:
    问题事件名称:APPCRASH
    应用程序名称:mapitestp.exe
    应用版本:0.0.0.0
    申请时间戳:4d82c905
    故障模块名称:ntdll.dll
    故障模块版本:6.1.7600.16559
    故障模块时间戳:4ba9b29c
    例外代码:4000001f
    异常抵消:000a1dcf     操作系统版本:6.1.7600.2.0.0.256.1
    地区ID:1033
    附加信息1:d1ab
    附加信息2:d1ab624ec7d094c26a73530c245a3468
    附加信息3:d1ab
    附加信息4:d1ab624ec7d094c26a73530c245a3468

非常感谢任何帮助或想法。感谢

1 个答案:

答案 0 :(得分:1)

在Embarcadero上看一下这个Link,可能是一些Unicode问题。

希望它对你有所帮助。