(예전 커뮤니티(2016-2020) 사이트에서 옮겨온 글입니다: 번호 25)
작성자: gongdo
날짜: 2017-01-12
안녕하세요, 하루 걸러 또 질문입니다.
가능하면 UI가 없이 콘솔 프로그램으로 COM 오브젝트에 접근하고 싶습니다.
두 종류의 tlb가 제공되는데 둘 다 각각 다른 현상으로 사용할 수 없습니다.
-
Bin\HwpObject.tlb
-
Bin\HwpAutomation.tlb
C# Console App에서 두 라이브러리를 Add Reference로 넣고 다음과 같이 코딩하였습니다.
//var hwp = new HwpObjectLib.HwpObject(); // HwpObject.tlb를 사용한 경우. 아래 메서드들은 동일.
var hwp = new HwpAutomationAppLib.HwpAutomation();
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample");
hwp.Open(@"D:\Temp\a.hwp", null, null);
hwp.SaveAs(@"D:\Temp\a.hml", "HWPML2X", null);?
이 때 HwpObject는 생성 단계에서 다음과 같은 예외가 발생합니다.
Unable to cast COM object of type ‘System.__ComObject’ to interface type ‘HwpObjectLib.HwpObject’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{5E6A8276-CF1C-42B8-BCED-319548B02AF6}’ failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
다른 HwpAutomation은 Open 메서드를 호출 할 때 다음과 같은 예외가 발생합니다.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
만약 C# WinForm으로 동일한 코드를 작성하면,
- HwpObject는 동일한 오류 발생
- HwpAutomation은 정상작동
합니다.
-수정-
방금 테스트해보니 WinForm에 OCX컨트롤을 올려놓지 않으면 HwpAutomation도 작동하지 않았습니다.
-
이 두 tlb의 차이는 무엇인가요?
-
부모 윈도(hwnd)가 없는 콘솔 프로그램에서 COM 오브젝트로 접근할 수 있을까요?
감사합니다.
댓글
yhjung (2017.01.19)
기본적으로 오토메이션사용 시 HwpObjectLib 를 쓰셔야 좋습니다.
C#에서 활성화는 아래 두줄만 입력되어도 정상적으로 나옵니다
using HwpObjectLib;
HwpObject myHwp = new HwpObject();