0

我遇到了一个奇怪的问题,即导出水晶报表会导致显示 MAPI 通讯簿出现问题。这是两个完全不相关的任务,我不明白一个如何影响另一个。

这是导出报告的示例:

Using rpt As New TestReport
    rpt.ExportToStream(ExportFormatType.PortableDocFormat)
End Using

这是显示 MAPI 通讯簿的示例:

Dim msg As New AxMSMAPI.AxMAPIMessages
Dim sess As New AxMSMAPI.AxMAPISession
Dim f As System.Reflection.FieldInfo
Const MAPI_LICENSE As String = "mgkgtgnnmnmninigthkgogggvmkhinjggnvm"

f = GetType(AxHost).GetField("licenseKey", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
f.SetValue(msg, MAPI_LICENSE)
f.SetValue(sess, MAPI_LICENSE)

sess.Parent = Me
msg.Parent = Me

sess.DownLoadMail = False
sess.LogonUI = True
sess.SignOn()
sess.NewSession = True
msg.SessionID = sess.SessionID
msg.Compose()

msg.Action = MSMAPI.MessagesActionConstants.mapShowAddressBook

sess.SignOff()

一件奇怪的事情是,如果我首先显示 MAPI 通讯簿,那么在程序的剩余生命周期中,导出水晶报表和显示 MAPI 通讯簿都会起作用。如果我先导出,则 MAPI 通讯簿在程序的剩余生命周期内都不起作用。

引发的异常在以下行中为“发生未指定的故障”,错误代码为“-2146796286”

msg.Action = MSMAPI.MessagesActionConstants.mapShowAddressBook
4

1 回答 1

0

值得一提的是,我的 MAPI 代码和 Crystal Reports 也有问题。我从来没有机会找出最终原因,但在某些情况下,查询当前文件夹、运行报告、然后恢复当前文件夹似乎有所帮助。

于 2013-03-21T19:48:46.703 回答