首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简短的COMException问题

简短的COMException问题
EN

Stack Overflow用户
提问于 2011-03-03 10:18:43
回答 1查看 533关注 0票数 0

嘿,伙计们,这里有一个简短的例子:

代码语言:javascript
复制
Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);

引发类型不匹配0x80020005 (DISP_E_TYPEMISMATCH)错误。

Close期望的是一个OlInspectorClose,所以我不知道为什么会有一个类型不匹配。

编辑:为了清晰,更多的代码!

代码语言:javascript
复制
public void Inspectors_Kill(Inspector Inspect)
    {
        Global.InspectorWrappers[Inspect].CustomTaskPane.Dispose();           
        Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);
        Global.InspectorWrappers.Remove(Inspect);
    }
EN

回答 1

Stack Overflow用户

发布于 2011-03-03 11:43:27

编辑来说明显而易见的事情,为什么不调用:

代码语言:javascript
复制
 inspect.Close(OlInspectorClose.olDiscard);

既然你已经有督察了?

这就是C++的样子(不完整)。类型库信息显示get_Inspectors返回检查器列表:

代码语言:javascript
复制
virtual HRESULT __stdcall get_Inspectors (/*[out,retval]*/ struct _Inspectors * * Inspectors ) = 0;

导入者:

代码语言:javascript
复制
#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")

利用智能包装器,access如下所示:

代码语言:javascript
复制
_ApplicationPtr app("Outlook.Application");
_InspectorsPtr list = app->GetInspectors();
_InspectorPtr i = list->Item(0);
i->Close(OlInspectorClose::olDiscard);

注意,我向Item函数传递了一个整数索引。在C#包装器中,接口声明如下所示:

代码语言:javascript
复制
    [DispId(282)]
    Inspectors _Application.Inspectors { [DispId(282)] get;

检查员实现的这个索引器如下所示:

代码语言:javascript
复制
    [DispId(0)]
    Inspector this[[MarshalAs(UnmanagedType.Struct), In] object Index] { [DispId(0)] get; }

注意,索引器的值被声明为一个对象。互操作包装器可能允许传入一个Inspector,以及一个int。事实上,鉴于索引器也将编组为int,这似乎是一种可能的情况。根据你的错误,我认为情况可能并非如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5175936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档