Outlook COM:通过后期绑定调用OpenSharedItem

时间:2015-02-13 15:57:14

标签: c# com outlook late-binding

返回的namespaceObjType类型是System .__ ComObject,并且无法在其上调用InvokeMember(" OpenSharedItem",...)。 你如何使用后期绑定技术调用此方法? 我看到的唯一区别是Session属性的返回对象类型只是一个接口而不是真正的COM类。

代码示例:

object outlookApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");
Type outlookAppType = outlookApp.GetType();
object templateObj = null;
System.IO.File.Copy(templateName, temporaryFileName, true);
object namespaceObj = outlookAppType.InvokeMember("Session", System.Reflection.BindingFlags.GetProperty, null, outlookApp, new object[0]);
if(namespaceObj != null)
{
  Type namespaceObjType = namespaceObj.GetType();
  // Exception on the next line of code
  templateObj = namespaceObjType.InvokeMember("OpenSharedItem", System.Reflection.BindingFlags.InvokeMethod, null, outlookApp, new object[] { temporaryFileName });
}

执行后的异常是:未知名称。 (来自HRESULT的异常:0x80020006(DISP_E_UNKNOWNNAME))

1 个答案:

答案 0 :(得分:0)

您需要传递一个namesapce对象而不是outlookApp:

namespaceObjType.InvokeMember("OpenSharedObject", System.Reflection.BindingFlags.InvokeMethod, null, namespaceObj, new object[] { temporaryFileName });

无论如何,Namespace类并没有提供OpenSharedObject模式。

您对OpenSharedItem方法感兴趣吗?