Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 短例外问题_C#_.net_Visual Studio 2010_Outlook_Vsto - Fatal编程技术网

C# 短例外问题

C# 短例外问题,c#,.net,visual-studio-2010,outlook,vsto,C#,.net,Visual Studio 2010,Outlook,Vsto,嘿,伙计们,这里有一个简短的例子: Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard); 引发类型不匹配0x80020005(显示类型不匹配)错误 Close期待一个OlInspectorClose,所以我不知道为什么会出现类型不匹配 编辑:为清晰起见,更多代码 public void Inspectors_Kill(Inspector Inspect) {

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

Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);
引发类型不匹配0x80020005(显示类型不匹配)错误

Close期待一个OlInspectorClose,所以我不知道为什么会出现类型不匹配

编辑:为清晰起见,更多代码

public void Inspectors_Kill(Inspector Inspect)
    {
        Global.InspectorWrappers[Inspect].CustomTaskPane.Dispose();           
        Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);
        Global.InspectorWrappers.Remove(Inspect);
    }

[编辑]要说明明显的问题,为什么不打电话:

 inspect.Close(OlInspectorClose.olDiscard);
既然你已经有检查员了

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

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")
利用智能包装器,access看起来像这样:

_ApplicationPtr app("Outlook.Application");
_InspectorsPtr list = app->GetInspectors();
_InspectorPtr i = list->Item(0);
i->Close(OlInspectorClose::olDiscard);
    [DispId(282)]
    Inspectors _Application.Inspectors { [DispId(282)] get;
请注意,我正在向Item函数传递一个整数索引。在C#包装器中,接口声明如下所示:

_ApplicationPtr app("Outlook.Application");
_InspectorsPtr list = app->GetInspectors();
_InspectorPtr i = list->Item(0);
i->Close(OlInspectorClose::olDiscard);
    [DispId(282)]
    Inspectors _Application.Inspectors { [DispId(282)] get;
检查员实现的此索引器如下所示:

    [DispId(0)]
    Inspector this[[MarshalAs(UnmanagedType.Struct), In] object Index] { [DispId(0)] get; }

请注意,索引器值被声明为对象。互操作包装器可能允许传入一个Inspector和一个int。事实上,考虑到索引器也将封送为int,这似乎是一种可能的情况。基于您的错误,我认为情况可能并非如此。

我不知道该组件,但dispatch接口是否支持该枚举?对于MailItem,我正在尝试关闭上述代码中的检查器。这可能就是这方面的页面,但它没有解释为什么会出现类型不匹配:它也可能是Inspect索引器。打破这个。很抱歉的评论垃圾邮件,但什么是类型的检查?我从来没有在C#中做过办公室工作,但在C#出现之前,我做过一些原始COM和ATL COM。(这就是我好奇的原因)我发表了一篇多编辑文章。我认为解决方案如下。我尝试了inspect.Close(OlInspectorClose.olDiscard),但同样的异常仍然发生在我身上。我不知道任务在C#中是如何工作的,所以为了安全起见,我尝试关闭应用程序的inspector集合。这很有趣。你有一个完整的项目,你可以把它放在某个地方吗?我很想知道inspector是从哪里来的。@Cat-FWIW,当使用索引器(并假设它有效)时,您只需对您已经拥有的inspector对象实例调用Close。不幸的是,我无法给出代码,但Inspect来自以下行:(MailItem.GetInspector)来自出现在MailItem Compose窗口中的UserControl对象。发送电子邮件后调用Inspectors_Kill方法,以便正确地终止窗口。这是因为处理简单MAPI请求的电子邮件撰写窗口行为异常,关闭后会留下“重影”窗口。另外,错误消息似乎刚刚更改:{“该项的属性和方法不能在此事件过程中使用。”}@Cat-Ok,我不能做很多其他事情。我确信关于Inspector实例的某些内容是无效的。您可以检查inspector集合上的属性,并确保您拥有的inspector有效并且是该集合的一部分。如果没有一个像样的测试用例,我就没有办法继续下去。对组件的调用是众所周知的端点,因此我怀疑它们是否是问题的一部分。