Visual Studio(MFC)기반입니다.
한글 오토메이션입니다.
한글 오피스 2024에서 HwpAutomation( CHwpObject클래스 )를 사용해서 문서를 열려고 하면 "서버에서 예외 오류가 발생했습니다."메시지가 뜹니다.
다시 닫으려고 하면 "RPC 서버를 사용할 수 없습니다."메시지가 뜹니다 확인 부탁드립니다.
디버깅하면서 느리게 열면 문제가 없습니다.
최신 패치를 해도 동일합니다.
Visual Studio(MFC)기반입니다.
한글 오토메이션입니다.
한글 오피스 2024에서 HwpAutomation( CHwpObject클래스 )를 사용해서 문서를 열려고 하면 "서버에서 예외 오류가 발생했습니다."메시지가 뜹니다.
다시 닫으려고 하면 "RPC 서버를 사용할 수 없습니다."메시지가 뜹니다 확인 부탁드립니다.
디버깅하면서 느리게 열면 문제가 없습니다.
최신 패치를 해도 동일합니다.
안녕하세요 ^^
아래와 같은 코드로 테스트시 제 PC에서 테스트시 정상 동작하고있습니다~!
혹시 어떻게 생성하고 사용하시는지 샘플코드를 주신다면 확인해보겠습니다.
감사합니다.
CHwpObject myHwpObj;
if (myHwpObj.CreateDispatch(L"HwpFrame.HwpObject.2") == TRUE) {
myHwpObj.RegisterModule(L"FilePathCheckDLL", CComVariant(L"FilePathCheckModule"));
CXHwpWindows xWindows;
xWindows = myHwpObj.get_XHwpWindows();
CXHwpWindow xWindow;
xWindow = xWindows.get_Active_XHwpWindow();
xWindow.put_Visible(1);
myHwpObj.Open(CComVariant(L"c:\\test.hwpx"),CComVariant(L""),CComVariant(L""));
}
오래 기다리셨습니다. 해당 부분만 분리해서 테스트하였고, 동일한 메시지가 발견되었습니다.
오류 발생 시나리오입니다.
[1] 한글 오토메이션을 생성한 후에 해제합니다.
m_ctrlHwp = new CHwpObject();
BOOL bSuccessCreate = m_ctrlHwp->CreateDispatch(_T("HWPFrame.HwpObject.1"));
if (bSuccessCreate == FALSE)
{
return FALSE;
}
if (m_ctrlHwp != NULL)
{
m_ctrlHwp->Quit();//반드시 있어야 합니다.
m_ctrlHwp->DetachDispatch();//없어도 오류 나옵니다.
m_ctrlHwp->ReleaseDispatch();//없어도 오류 나옵니다.
delete m_ctrlHwp;
m_ctrlHwp = NULL;
}
[2] 그 후에 특정 한글 문서를 열면서 화면에 표시시킵니다.
CLawView* pLawView = new CLawView();
DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP | AFX_CBRS_CLOSE | AFX_CBRS_FLOAT;
if (!pLawView->Create(strTargetSrcView, this, CRect(0, 0, 0, 0), TRUE, 1, dwStyle))
{
delete pLawView;
pLawView = nullptr;
return FALSE; // failed to create
}
//파일 열기(자세한 내용은 생략)
varFormat =(CComBSTR)T2BSTR(_T(“HWP“))
varArgument= (CComBSTR)T2BSTR(L"lock:false;forceopen:true”)
BOOL bOpen = m_ctrlHwp->Open(strFilename, varFormat, varArgument);
DockingPane위에 CDialog롤 올렸고 그 위에 CHwpObject의 핸들을 올렸습니다.
자세한 것은 내부 기술이기 때문에 forum에 공개하기 어렵습니다.
[3] DockingPane을 상속받은 클래스의 Create함수 내부는 아래와 같습니다.
BOOL CLawView::Create(LPCTSTR lpszCaption, CWnd* pParentWnd, const RECT& rect, BOOL bHasGripper,
UINT nID, DWORD dwStyle, DWORD dwTabbedStyle, DWORD dwControlBarStyle, CCreateContext* pContext)
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
BOOL bCreate = CDockablePane::Create(lpszCaption, pParentWnd, rect, bHasGripper, nID, dwStyle,
AFX_CBRS_REGULAR_TABS, AFX_DEFAULT_DOCKING_PANE_STYLE, pContext);
m_ctrlHwp->ReleaseDispatch();
m_ctrlHwp->Clear(COleVariant((short)1));
BOOL bSuccessCreate = m_ctrlHwp->CreateDispatch(_T("HWPFrame.HwpObject.1"));
if (bSuccessCreate == FALSE)
{
return FALSE;
}
VARIANT varModuleData;
varModuleData.vt = VT_BSTR;
varModuleData.bstrVal = (CComBSTR)T2BSTR(L"FilePathCheckerModuleExample");
BOOL bSuccessRegister = m_ctrlHwp->RegisterModule(L"FilePathCheckDLL", varModuleData);
m_ctrlHwp->Run(_T("ShapeObjAlignWidth"));
}
오류 메시지가 발생하는 시점은 Open함수입니다.
forum에는 파일 추가가 안 되어서 첨부하지 못 했습니다.
메일로는 드릴 수 있습니다.
한글 오피스 2024 세부 버전 정보는 13.0.0.1053입니다.
처음에 설치했을 때는 13.0.0.711이었던 것으로 기억합니다.
한글 오토메이션 개체와의 연결이 끊겨서 발생했을 가능성이 높습니다.
CreateDispatch를 하면 Client Application (Client) → Hwp.exe (Server) 가 연결되는데
이런 케이스가 될 것 같은데요.
샘플을 디버깅해보면 명확히 답변드릴 수 있을 것 같네요.
제가 조금 더 기다려야하는 건가요? 아니면, 제가 뭔가 해야 하는 건가요?
재현은 되셨나요?
안녕하세요 ^^
저도 바로 해보고 도와드리고 싶지만 급한 업무들이 밀려서 바로바로 해볼수가 없네요 ㅠ
언제 되겠다 딱 말씀드리기 어려울것같습니다.
그런데 작성하신 코드를 보니 Object를 릴리즈 한뒤 Clear API호출을 하는 부분이 있는대요.
여기서 오류가 날것같습니다. Release를 해제 했는데 ApI를 호출하여 정상 동작하지 않을것 같습니다.
혹시 의도한 동작이실까요?
[1] (별로 안 중요함) 제가 기억을 되집어보니 Clear(1) 함수는 한글 오피스를 빈 문서로 바꾸는 내용입니다.
CreateDispatch(생성)를 하기 전에 소멸의 개념으로 구현한 것으로 보입니다.
제가 텍스트로 드린 내용에는 없지만, 실제로는 소멸과 같이 메모리 해제도 같이 합니다.
[2] (중요함) ReleaseDispatch를 Clear보다 먼저 한 특별한 이유는 없는 것으로 보입니다.
저도 의구심이 들어서 Clear를 먼저 한 후 ReleaseDispatch를 해보았지만 동일한 문제가 발생했습니다.
즉, 이 부분이 문제는 아닌 것 같습니다.
저도 재촉하기는 싫지만, 언제쯤 확인시작 및 작업이 가능할까요?
안녕하세요 ^^
저도 빨리 확인해보고 싶지만 바로는 어려울것 같습니다.
다음주는 되어야 확인해볼수 있을것 같습니다~!
그런데 혹시 [1] 부분의 생성한 후 해제 한뒤 CHwpObject를 새로 new CHwpObject로 생성 하셨을까요?
전체 코드가 아니여서 유추해서 하나하나 돌렸을땐 문제가 없었는데 생각해보니 delete를 한뒤 null 인상태에서 CreateDispatch 를 호출하면 오류가 발생할수 밖에 없을것 같습니다.
우선 해당 부분이 아니라면 저도 소스를 다시 돌려보면서 어떤문제일까 확인을 고민을 해봐야할것 같은데 다음주나 가능할것 같습니다 ㅠ
delete하지 않았습니다.
delete했으면, "서버에서 예외 오류가 발생했습니다."라는 메시지가 안 뜨고, 그냥 죽었겠죠.
올려주신 1번 스탭에서 한글 오토메이션을 해제하는 분에서 createDispatch가 된 경우 delete를해서 포인터를 초기화 시키는 부분이 있어서 말씀드렸습니다 ^^
설명해주신대로 [1] [2] [3] 스탭을 갈떄 [2]스탭에서는 [1]스탭에서 컨트롤이 딜리트된 이후인데 [2]에서는 생성 부분이 없고 [3]에서는 createDispatch가 있으나 new를 하는 부분이 없어서 말씀드렸습니다.
아! [1] 부분과 [3] 부분에 있는 m_ctrlHwp는 변수명만 같고, 다른 클래스에 있는 다른 변수입니다.
왠만하면, 샘플 만들려고 노력하지 마시고, 제가 가지고 있는 단위 테스트 파일 받아서 작업하시기 바랍니다.
파일 받으면, 이런 대화를 할 필요도 없기 때문입니다.
다시 한번 더 현재 상황이 어떤지 조심스럽게 여쭈어 봅니다.
안녕하세요 ^^
확인해보았지만 내부에서는 정상적으로 뜨고 있습니다.
메일을 따로 알려드릴순 없고 구글 드라이버 같은 웹드라이버에 소스를 올려서 링크를 공유주시거나,
홈페이지의 고객지원 쪽으로 기술지원을 받으셔야할꺼 같습니다.
감사합니다.
support@hancom.com으로 메일 드리면 안 되나요?
네 해당메일은 제가 확인이어려울 것 같습니다 …! ㅜ ㅜ
구글 드라이브를 자주 사용하지 않아서 제대로 했는지는 잘 모르겠습니다.