한글 오토메이션을 사용해서 문서의 내부값을 확인하고 있습니다.
개발 환경은 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;
}