2016-06-10 13 views
0

내 Outlook 추가 기능에서 다음과 같이 rdoSession 개체를 사용해야 할 때마다 새 rdoSession 개체를 만들고 mapi 개체를 설정합니다.전체 추가 기능 응용 프로그램을 통해 단일 Redemption.rdosession 개체를 유지하는 방법

Redemption.RDOSession session = Redemption.RedemptionLoader.new_RDOSession(); session.MAPIOBJECT = outlookApplicaitonObject.Session.MAPIOBJECT;

전 세계적으로 하나 개의 정적 Redemption.rdoSession 객체를 가질 가능성이있다, 그래서 그것을 사용을 할 때마다 나는 그것을 호출 할 수 있습니다? 나는 정적 인 RdoSession 객체를 선언했고 때때로 예외를 던지기도한다.

'System .__ ComObject'유형의 COM 개체를 'Redemption.IRDOSession'인터페이스 유형으로 캐스팅 할 수 없습니다. 다음 오류로 인해 IID '{E54C5168-AA8C-405F-9C14-A4037302BD9D}'인터페이스의 COM 구성 요소에서 QueryInterface 호출이 실패했기 때문에이 작업이 실패했습니다. 형식 라이브러리/DLL을로드하는 동안 오류가 발생했습니다. (HRESULT 예외 : 0x80029C4A (TYPE_E_CANTLOADLIBRARY))

이유는 무엇이며 내가하려는 일을 할 수 있습니까?

답변

1

여러 스레드를 사용하고 있습니까? 자세한 내용은 각 스레드에 RDOSession 인스턴스를 생성해야합니다 (http://www.dimastr.com/redemption/faq.htm#Threads 참조).

Namespace.MAPIOBJECT의 값을 별도의 변수에 저장할 수 있으므로 (IMAPISession이 OOM 또는 Redemption 개체가 아닌 스레드간에 마샬링되도록) RDOSession.MAPIOBJECT 속성을 스레드의 각 스레드에서 해당 변수로 설정합니다 RDOSession의 로컬 인스턴스.

+0

예. 문제는 다른 스레드를 사용하는 함수에서 발생합니다. –

+0

혼란 스러울 때, 필요한 작업이 완료되거나 Outlook 종료시 세션 개체를 해제하는 것이 무엇보다 중요합니까? –

+0

생성 된 보조 스레드에서 RDOSession을 해제해야합니다. 그렇지 않으면 해제되고 MAPIUninitialize가 GC 스레드에서 호출됩니다. –