2017-01-09 5 views
0

IConverterSession을 사용하여 EML에서 MSG (MIME에서 MAPI)로 변환하려고했지만 COM 오류가 발생했습니다. C# MAPIMethods 클래스를 사용하여 IConverterSession을 래핑합니다 (예 : Save Mail in MIME format (*.eml) in Outlook Add-In).MIME MAPI IConverterSession COMException on Activator.CreateInstance

처음에는이 게시물 (https://blogs.msdn.microsoft.com/stephen_griffin/2014/04/21/outlook-2013-click-to-run-and-com-interfaces/)으로 해결 된 알 수없는 clsid의 문제가있었습니다.

지금 적절한 레지스트리 키를 편집 한 것으로, 나는 새로운 문제에 직면 : 첫째, 나는 오류 메시지 The operating system is not presently configured to run this application을 얻고, 내가 COMException 수 : Retrieving the COM class factory for component with CLSID {4E3A7680-B77A-11D0-9DA5-00C04FD65685} failed due to the following error: 8007013d The system cannot find message text for message number 0x in the message file for . (Exception from HRESULT: 0x8007013D).

내 코드는 다음과 같습니다

Type converter = Type.GetTypeFromCLSID(MAPIMethods.CLSID_IConverterSession, true); 
    object obj = Activator.CreateInstance(converter); 
    MAPIMethods.IConverterSession session = (MAPIMethods.IConverterSession)obj; 

"개체 obj = Activator.CreateInstance (변환기);"오류가 발생합니다.

COMException은 일반적으로 "형식이 COM 개체이지만 형식을 가져 오는 데 사용 된 클래스 식별자가 유효하지 않거나 식별 된 클래스가 등록되지 않았습니다."를 의미합니다. 따라서 Type converter = Type.GetTypeFromCLSID(MAPIMethods.CLSID_IConverterSession, true);이 적절한 유형을 반환하지 않거나 어딘가에 누락 된 레지스트리 키가 있습니다.

저는 Win 64bit에서 Office 15 (2013) C2R 32 비트를 사용하고 있습니다. 응용 프로그램은 x86 빌드 구성에서 설정됩니다.

내가 누락 된 부분이 있습니까? 누구든지 도와 줄 수 있습니까?

답변

1

"운영 체제가 현재이 응용 프로그램을 실행하도록 구성되지 않았습니다"- 응용 프로그램이 32 비트 버전의 Outlook이 설치된 컴퓨터에서 x64로 컴파일 된 것처럼 들립니다.

사용 하시겠습니까? 그것은 닷넷 언어에 대한 IConverterSession 래핑합니다. 다음과 같은 것이 일을해야합니다. 그것을 볼 수 있습니다 또는 IConverterSesison 경우 내부 구속 계산기를 사용할 수없는 경우

using Redemption; 
... 
Redemmption.RDOSession session = new Redemmption.RDOSession(); 
Redemmption.RDOMail msg = session.CreateMessageFromMsgFile(@"c:\temp\test.msg"); 
msg.Import(@"c:\temp\test.eml", Redemption.rdoSaveAsType.olRFC822); 
msg.Save(); 

olRFC822 형식 (예를 들어 교환 MAPI 버전 또는 IConverterSession 사용할 수 없습니다 아웃룩 2016 C2R의 최신 버전에서) IConverterSession을 사용합니다. Redemption 또는 Outlook (IConverterSession) 변환기를 항상 강제로 실행하려면 olRFC822_Redemption 또는 olRFC822_Outlook을 사용하십시오.

+0

안녕하세요, Dmitry, 답변 드릴 것 같습니다. 사실, 내 컴퓨터는 64 비트이고 Office는 32이지만 목표 빌드를 32 비트로 설정했습니다. – Antoine

+0

Outlook 2013 C2R의 버전은 몇 개입니까? MS는 최근 IConverterSession이 Outlook 외부에서 생성되는 것을 방지하는 Outlook 2016 C2R (Outlook 2013에 대해 알지 못함)을 변경했습니다. –

+0

(내 첫 번째 의견을 수정하려고 시도했지만 너무 늦었습니다 ...) 완벽하게 작동하지만 동료 동료와 공유하고 싶기 때문에 보너스를 사용하지 않으려했습니다. (Lotus에서 Outlook으로 마이그레이션했습니다. , 나는 이메일을 다시 받고 싶다). 그래서 나는 그것을 가능한 한 독립적으로 유지하려고 노력했다. – Antoine