Outlook COM:通过后期绑定调用 OpenSharedItem
Outlook COM: Invoke OpenSharedItem via late binding
返回的 namespaceObjType 类型是 System.__ComObject 并且不可能对其调用 InvokeMember("OpenSharedItem", ...) 。
您需要如何使用后期绑定技术调用此方法?
我看到的唯一区别是 Session 属性 返回的对象类型只是一个接口而不是真正的 COM Class.
代码示例:
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))
您需要传递一个命名空间对象而不是 outlookApp:
namespaceObjType.InvokeMember("OpenSharedObject", System.Reflection.BindingFlags.InvokeMethod, null, namespaceObj, new object[] { temporaryFileName });
无论如何,命名空间 class 不提供 OpenSharedObject 模式。
您对 OpenSharedItem 方法感兴趣吗?
返回的 namespaceObjType 类型是 System.__ComObject 并且不可能对其调用 InvokeMember("OpenSharedItem", ...) 。 您需要如何使用后期绑定技术调用此方法? 我看到的唯一区别是 Session 属性 返回的对象类型只是一个接口而不是真正的 COM Class.
代码示例:
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))
您需要传递一个命名空间对象而不是 outlookApp:
namespaceObjType.InvokeMember("OpenSharedObject", System.Reflection.BindingFlags.InvokeMethod, null, namespaceObj, new object[] { temporaryFileName });
无论如何,命名空间 class 不提供 OpenSharedObject 模式。
您对 OpenSharedItem 方法感兴趣吗?