한글오토메이션 GetText오류

한글 오토메이션을 사용해서 문서의 내부값을 확인하고 있습니다.
개발 환경은 MFC입니다.

1] CreateDispatch(_T(“HWPFrame.HwpObject.1”))으로 CHwpObject개체를 얻었습니다.
2] Open함수로 HWP파일을 열었습니다.
3] InitScan함수로 값을 얻기 위한 초기선언을 하였습니다.
4] GetText함수로 값을 얻으려고 했지만 죽어버립니다.

매뉴얼을 뒤져보았지만 문제가 없어서 게시판에 글을 적습니다.
현재 "보안 모듈 등록"은 건너뛰고 진행하고 있습니다.

세부 소스 코드입니다. 샘플 파일을 보내드릴 수도 있지만 파일 첨부가 안 되서 소스 코드만 적습니다.

CHwpObject	m_hwpObject;

CoInitialize(NULL);

BOOL	bSuccessCreate = m_hwpObject.CreateDispatch(_T("HWPFrame.HwpObject.1"));
if (bSuccessCreate == FALSE)
{
	return FALSE;
}
VARIANT varFormat, varArgument;
varFormat.vt = VT_BSTR;
varArgument.vt = VT_BSTR;

varFormat.bstrVal = L"HWP";								// HWP Format
varArgument.bstrVal = L"lock:false;forceopen:true";		// lock

static TCHAR BASED_CODE szFilter[] = _T("한글 파일(*.HWP, *.HWPX) | *.HWP;*.HWPX;*.hwp;*.hwpx |모든파일(*.*)|*.*||");
CFileDialog dlg(TRUE, _T("*.hwp"), _T("hwp"), OFN_HIDEREADONLY, szFilter);
if (IDOK == dlg.DoModal())
{
	CString pathName = dlg.GetPathName();

	CString lpszPath = _T("");
	lpszPath = pathName;
	BOOL	bOpen = m_hwpObject.Open(lpszPath, varFormat, varArgument);
	if (bOpen == FALSE)
	{
		return FALSE;
	}

	// 스캐닝의 범위를 블럭으로 한정함.
	COleVariant option, range, spara, spos, epara, epos;
	option.vt = VT_UINT; option.uintVal = 0x00 | 0x01 | 0x02 | 0x04;	// 모든 대상
	range.vt = VT_UINT; range.uintVal = 0x00ff;							// 선택 블럭

	m_hwpObject.InitScan(option, range, spara, spos, epara, epos);

	BSTR strBuf = _T("");
	LONG lnGetText = m_hwpObject.GetText(&strBuf);// <=죽어버립니다. 

	m_hwpObject.ReleaseScan();

	return	TRUE;
}
2개의 좋아요

안녕하세요 ~ 한글 버전이 어떻게 되실까요 …?

그리고 보면 InitScan에서 옵션과 레인지만 초기화를 해주고 시작 pos와 종료 pos에 대하여 초기화가 안된 값을 넘겨주셨습니다.
해당 부분도 초기화된 값을 넘겨주셔야 합니다.

감사합니다 ^^

2개의 좋아요

현재 한글 오피스 버전은 2022로 확인되었습니다.
파라미터 기본값은 확인해보겠습니다. 감사합니다.

2개의 좋아요
// 스캐닝을 설정.
COleVariant option, range, spara, spos, epara, epos;

// maskNormal 0x00, maskChar 0x01, maskInline 0x02, maskCtrl 0x04
option.vt = VT_UINT; option.uintVal = 0x00 | 0x01 | 0x02 | 0x04;	// 모든 대상
range.vt = VT_UINT; range.uintVal = 0x0070 | 0x0007 | 0x0000;		// 문단의 시작부터 끝까지, 정방향 탐색

// 추가된 부분 시작
spara.vt = VT_UINT; spara.uintVal = 0;
spos.vt = VT_UINT; spos.uintVal = 0;
epara.vt = VT_UINT; epara.uintVal = 0x00ff;
epos.vt = VT_UINT; epos.uintVal = 0x00ff;
// 추가된 부분 끝

m_ctrlHwp->InitScan(option, range, spara, spos, epara, epos);

확인을 해보았고 동일하게 문제가 있습니다. 감사합니다.

2개의 좋아요

안녕하세요 ^^
아래와 같이 테스트시 정상동작 확인했습니다.
BSTR을 CComBSTR로 사용해야할것 같습니다. 감사합니다~!

myHwpObj.InitScan(COleVariant(), (COleVariant)(long)(0x0077), COleVariant(), COleVariant(), COleVariant(), COleVariant());
CComBSTR strBuffer;
int nLen = myHwpObj.GetText(&strBuffer);
if (nLen > 0) {
	AfxMessageBox(strBuffer);
}
2개의 좋아요

감사합니다.
언급하신 방식으로 변경하였더니 해결되었습니다.

2개의 좋아요