일단 MFC(Visual Studio)환경이라는 것부터 말씀드립니다.
HWP AUTOMATION입니다.
CHwpObject클래스의 Clear함수에서 "서버에서 예외 오류가 발생했습니다."라는 메시지가 뜨면서 죽는 현상이 있었습니다.
물론 항상 발생하는 오류는 아닙니다.
[1] 한글 오피스 문서를 엽니다.
[2] SetPos라는 함수([BOOL SetPos(long List, long Para, long pos)])에서
List라는 파라미터에 120처럼 상대적으로 큰 값을 넣어서 호출합니다.
[3] 문서에 10줄 이상의 여러 줄 추가합니다.
[4] Clear함수를 호출합니다. 확인 결과, 파라미터는 상관없는 것 같습니다.
시나리오 결과 : 그러면 "서버에서 예외 오류가 발생했습니다."라는 메시지가 뜨면서 죽습니다.
제 예상에 커서의 위치가 120에 있는데 그 앞부분(60정도)에 글씨가 대량으로 추가되면 문제가 발생하는 것으로 보입니다.
SetPos가 아니고 문서를 순회(사용시 InitScan, ReleaseScan를 호출)하면서 GetText를 호출해도 문제가 발생합니다.
<<샘플 소스>>
-로드해서 이동하는 부분
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;
}
m_hwpObject.SetPos(119, 0, 0);
}
-Clear하는 부분
if (m_hwpObject.get_IsModified())
{
// hwpSaveIfDirty
m_hwpObject.Clear(COleVariant((short)2));
}