我遇到一个奇怪的问题,导出水晶报告会导致显示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
答案 0 :(得分:0)
值得一提的是,我也看到了MAPI代码和Crystal Reports的问题。我从来没有机会找出最终原因,但在某些情况下查询当前文件夹,运行报告,然后恢复当前文件夹似乎有帮助。