c# – 带有Outlook互操作的OpenSharedItem在Office 2003中引发奇怪的异常,适用于Office 2008
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 带有Outlook互操作的OpenSharedItem在Office 2003中引发奇怪的异常,适用于Office 2008,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2407字,纯文字阅读大概需要4分钟。
内容图文
![c# – 带有Outlook互操作的OpenSharedItem在Office 2003中引发奇怪的异常,适用于Office 2008](/upload/InfoBanner/zyjiaocheng/792/b6687104f3464249a81f954def8a7f46.jpg)
我正在使用Office interop API打开从outlook保存的.msg文件,然后显示一个回复窗口以允许用户回复它.
运行Office 2003时,OpenSharedItem(pathToMSGFile); call抛出以下异常:
Unhandled Exception: System.AccessViolationException: Attempted to read or write
protected memory. This is often an indication that other memory is corrupt.
at Microsoft.Office.Interop.Outlook._NameSpace.OpenSharedItem(String Path)
at OutlookTest.Program.Main(String[] args)
运行Office 2008时,它工作正常.
我把一个小测试用例放在一起,代码如下:
static void Main(string[] args)
{
try
{
Application app;
string pathToMSGFile = "\\\\path\\to\\foobar.msg";
if (args.Length > 0)
{
pathToMSGFile = args[0];
}
if (!File.Exists(pathToMSGFile))
{
Console.WriteLine("{0} does not exist.", pathToMSGFile);
return;
}
Console.WriteLine("Opening {0}", pathToMSGFile);
Type olType = Type.GetTypeFromProgID("Outlook.Application", false);
app = Activator.CreateInstance(olType) as Application;
MailItem fld = (MailItem)app.Session.OpenSharedItem(pathToMSGFile);
_MailItem reply = fld.ReplyAll();
reply.Save();
reply.Display(false);
Console.ReadKey();
reply.Close(OlInspectorClose.olDiscard);
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
if (ex.InnerException != null)
{
Console.WriteLine(ex.InnerException.ToString());
}
}
Console.ReadKey();
}
该应用程序的目标是.Net 4,使用Office12互操作库.无论是为AnyCPU还是x86编译,都会发生同样的情况.
解决方法:
我注意到互操作库的版本11不包含OpenSharedItem()方法.
它从版本12开始可用.
看来这个操作在Office 11/2003上是不可用的(至少不能通过任何版本的互操作lib上的方法调用).
我不确定这是否适合您的场景,但我在Outlook Redemption库中取得了很大的成功.
从What is Outlook Redemption?开始:
Outlook Redemption works around limitations imposed by the Outlook Security Patch plus provides a number of objects and functions to work with properties and functionality not exposed through the Outlook object model.
Redemption library also includes the RDO (Redemption Data Objects) family of objects that can function as a complete CDO 1.21 or Outlook Object Model replacement.
它似乎规避了不同版本的Outlook中的一些奇怪/不一致的行为(无论是通过设计还是作为原始目标的“副作用”).
如果您对CDO非常熟悉,那么您会对RDO感到满意.但说实话,我不知道它如何“映射”到Microsoft.Office.Interop.Outlook.
参见http://www.dimastr.com/redemption/rdo/rdosession.htm
Session.OpenSharedItem()的等效RDO函数是RDOSession.GetMessageFromMsgFile().
NB除了我偶尔使用它之外,我与这个产品没有任何关系!
内容总结
以上是互联网集市为您收集整理的c# – 带有Outlook互操作的OpenSharedItem在Office 2003中引发奇怪的异常,适用于Office 2008全部内容,希望文章能够帮你解决c# – 带有Outlook互操作的OpenSharedItem在Office 2003中引发奇怪的异常,适用于Office 2008所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。