Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);
引发类型不匹配0x80020005(DISP_E_TYPEMISMATCH)错误。
关闭期待OlInspectorClose正常,所以我不知道为什么会出现类型不匹配。
编辑:更清晰的代码!
public void Inspectors_Kill(Inspector Inspect)
{
Global.InspectorWrappers[Inspect].CustomTaskPane.Dispose();
Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);
Global.InspectorWrappers.Remove(Inspect);
}
答案 0 :(得分:0)
[编辑]说明显而易见的,你为什么不打电话:
inspect.Close(OlInspectorClose.olDiscard);
既然您已经有检查员了吗?
这就是C ++的样子(不完整)。类型库信息显示get_Inspectors返回Inspectors列表:
virtual HRESULT __stdcall get_Inspectors (/*[out,retval]*/ struct _Inspectors * * Inspectors ) = 0;
导入:
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE14\mso.dll" no_namespace
#import "C:\Program Files\Microsoft Office\OFFICE14\msoutl.olb" rename_namespace("Outlook")
利用智能包装器,访问看起来像这样:
_ApplicationPtr app("Outlook.Application");
_InspectorsPtr list = app->GetInspectors();
_InspectorPtr i = list->Item(0);
i->Close(OlInspectorClose::olDiscard);
请注意,我正在将一个整数索引传递给Item函数。在C#包装器中,接口声明如下所示:
[DispId(282)]
Inspectors _Application.Inspectors { [DispId(282)] get;
Inspectors实现的这个索引器看起来像:
[DispId(0)]
Inspector this[[MarshalAs(UnmanagedType.Struct), In] object Index] { [DispId(0)] get; }
请注意,索引器值被声明为对象。 interop包装器可以传入Inspector,也可以传入int。事实上,这似乎是可能的情况,因为索引器也会作为一个整数编组。根据您的错误,我认为情况可能并非如此。