【问题标题】:Delphi MapiSendMail Crashes on Windows 7 64-bitDelphi MapiSendMail 在 Windows 7 64 位上崩溃
【发布时间】:2011-03-18 04:01:08
【问题描述】:

我有 Windows 7 64 位,我的 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

任何帮助或想法将不胜感激。谢谢

【问题讨论】:

  • 是否安装了 64 位 MAPI 版本?
  • @mjn:32 位应用程序将使用 32 位映射。
  • @Remko:32 位应用程序可以通过 OS 提供的网桥将 64 位 MAPI 用于 MapiSendMail 功能 - 这在 MSDN 中有记录:msdn.microsoft.com/en-us/library/dd941355.aspx

标签: delphi mapi windows-7-x64 mapisendmail


【解决方案1】:

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

希望对你有帮助。

【讨论】:

  • 感谢您的链接;但是,StrPCopy 已经将字符串转换为 PAnsiString,这是 lpszPathName 或 lpszFileName 所需要的。
猜你喜欢
  • 1970-01-01
  • 2015-11-07
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多