2011-03-03 7 views
0

얘들 아, :짧은 COMException 질문

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

해당 구성 요소를 모르지만 디스패치 인터페이스에서 지원하는 열거 형입니까? –

+0

그건 MailItem 용이고, 위의 코드에서 Inspector를 닫으려고합니다. 이것은 아마 그 페이지입니다. 그러나 왜 형식이 일치하지 않는지 설명하지 못합니다. http://msdn.microsoft.com/en-us/library/ff869503.aspx – Cat

+1

수 있습니다. * Inspect * 인덱서가 될 수 있습니다. 게다가. 이것을 부셔 라. –

답변

0

[편집] 상태로, 왜 당신은 분명 호출하지 않습니다

inspect.Close(OlInspectorClose.olDiscard); 

이미 관리자를 가지고 있기 때문에?

이것은 C++이 (불완전하게 보이는) 것입니다. 액세스는 다음과 같이 보인다, 스마트 래퍼를 활용

#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") 

:에 의해 수입

virtual HRESULT __stdcall get_Inspectors (/*[out,retval]*/ struct _Inspectors * * Inspectors) = 0; 

: 형식 라이브러리 정보는 get_Inspectors이 사찰의 목록을 반환 보여줍니다

_ApplicationPtr app("Outlook.Application"); 
_InspectorsPtr list = app->GetInspectors(); 
_InspectorPtr i = list->Item(0); 
i->Close(OlInspectorClose::olDiscard); 

공지 사항을 그 Item 함수에 정수 인덱스를 전달하고 있습니다. 는 C# 래퍼에서 인터페이스 선언은 다음과 같습니다 인덱서 값은 객체를 선언하는 것이

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

주의 사항 :

[DispId(282)] 
    Inspectors _Application.Inspectors { [DispId(282)] get; 

사찰 구현의이 인덱서는 것 같습니다. Interop 래퍼를 사용하면 Inspector를 int로 전달할 수 있습니다. 실제로, 인덱서가 int로 정렬 할 수있는 가능성이있는 시나리오로 보입니다. 귀하의 오류를 기반으로, 나는 그렇지 않을 수도 있습니다 생각합니다.

+0

inspect.Close (OlInspectorClose.olDiscard)를 시도했지만 동일한 예외가 여전히 발생합니다. C#에서 할당이 어떻게 작동하는지 모르겠으므로 응용 프로그램의 검사기 컬렉션을 안전하게 닫으려고했습니다. – Cat

+0

그건 재미 있어요. 어딘가에 넣을 수있는 프로젝트가 있습니까? 나는 검사관이 어디에서 왔는지보고 싶어합니다. –

+0

@Cat - FWIW, 인덱서를 사용할 때 (그리고 그것이 작동한다고 가정하면) 이미 가지고있는 Inspector 객체 인스턴스에서 Close를 호출하고있을뿐입니다. –

관련 문제