Краткий вопрос COMException - PullRequest
       10

Краткий вопрос COMException

0 голосов
/ 03 марта 2011

Эй, ребята, вот короткий:

Globals.ThisAddIn.Application.Inspectors[Inspect].Close(OlInspectorClose.olDiscard);

Выдает ошибку несоответствия типов 0x80020005 (DISP_E_TYPEMISMATCH).

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);
    }

1 Ответ

0 голосов
/ 03 марта 2011

[Редактировать] Чтобы сформулировать очевидное, почему бы вам не позвонить:

 inspect.Close(OlInspectorClose.olDiscard);

Так как у вас уже есть инспектор?

Так выглядит C ++ (не полностью),Информация библиотеки типов показывает, что get_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;

Этот индексатор реализации инспекторов выглядит следующим образом:

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

Обратите внимание, что значения индексатора объявлены объектом.Вполне возможно, что оболочка взаимодействия позволяет передавать Inspector, а также int.Фактически, это может показаться вероятным сценарием, если учесть, что индексатор тоже будет маршалировать как int.Исходя из вашей ошибки, я думаю, что это может быть не так.

...