Clear함수 오류(MFC환경입니다.)

안녕하세요 ㅠ

알려주신대로 inplace 방식으로 테스트 해보았으나 내부에서는 재현이 안되고있습니다 …!

감사합니다.

2개의 좋아요

테스트를 잘 못 하셨습니다.
시나리오
[1] 한글 오피스창을 다른 MDI프로그램안에 붙입니다.
[2] 문서의 하단에 표가 있는 문서를 Open합니다. (문서는 클 수록 오류가 발생할 확률이 높습니다.)
[3] InitScan, GetTextCarat, ReleaseScan을 합니다.
[4] 문서에 여러 줄을 추가합니다.
[5] Clear함수를 호출합니다.

보여주신 캡쳐에는 InitScan, GetTextCarat, ReleaseScan후에 같은 함수에서 Clear함수를 호출합니다.
이는 [3]번 문서에 여러 줄을 추가하는 시나리오를 추가하지 않았다는 의미입니다.

2개의 좋아요

사용자가 문서에서 줄을 추가하는 편집 시나리오가 추가되지 않으면 절대 오류가 발생하지 않습니다.
캡쳐한 소스 코드 처리 Clear함수는 Load부분과 분리해서 사용자 편집 이후에 동작해야 합니다.

2개의 좋아요

이미지를 보니까, SDI(단일 문서 기반)인거 같은데 저는 MDI(다중 문서 기반)에서 확인하였습니다.

2개의 좋아요

안녕하세요 ^^
MDI 기반 으로 여러번 테스트 해보았으나 재현되지 않고있습니다.
78페이지 문서였으며 시나리오 대로 테스트해도 정상적으로 동작하고있습니다.

디벨로퍼로는 응대에 한계가 있을것 같습니다.
cwy님 답변 확인해주시면 좋을것 같습니다.

감사합니다.

2개의 좋아요

예전 버전으로 제품이 있는데 담당했던 분이 누군지가 너무 오래 되서 연락하기가 어렵습니다.

2개의 좋아요

파일을 전달할 수는 없나요? 제 샘플 소스 코드와 샘플 문서를 드리면 바로 재현이 되는데, 텍스트로 의사 소통하는데 어려움이 있습니다.

2개의 좋아요

그렇다고 여기에 제품 번호를 올리면 안 될 것 같습니다.

2개의 좋아요

네, 문의하신 내용은 아래 '제품 문의’란을 통해 직접 문의해주시기 바랍니다. 아울러 해당 서비스는 고객님께 정확한 도움을 드리기 위해 한컴닷컴에 로그인 후 문의를 남기실 수 있는 점 참고 부탁 드립니다.

  • 제품 문의: 제품 문의
    [문의 분야] - [솔루션], [개발자문의]로 남겨주시면 감사하겠습니다.
    아울래 해당 제품 문의에서는 첨부파일 또한 전송하실 수 있는 점 알려드립니다.

한컴디벨로퍼를 이용해 주셔서 감사합니다.

2개의 좋아요

[제품문의]로 글을 올렸더니 다시 forum에 질문하라고 답변이 왔습니다.

그 사이에 제가 해당 문제를 발견하기 위해서 더 추가적으로 확인을 해보았습니다.
소스 코드 부분을 더 추가하셔서

KeyIndicator를 사용하셔야 할 것 같습니다.
MDI에 자식으로 붙이지 않아도 발생합니다.

-소스 코드-

	BOOL bContinue = TRUE;
	long lret;							// 텍스트 추출 함수 호출 후 리턴값
	CComBSTR strBufCom;						// 읽어온 라인데이터를 저장할 변수

	InitScan();
	while (bContinue)
	{
		lret = GetTextCarat(strBufCom);
		if (lret == 0 || lret == 1 || lret == 101 || lret == 102)
		{
			bContinue = FALSE;
		}
		else
		{
			hwpObject.MovePos(COleVariant((long)201/*CHwpOleManager::moveScanPos*/), COleVariant((long)0), COleVariant((long)0));

			long slist = 0, spara = 0, spos = 0;		// 문단정보
			//hwpObject.GetPos(&slist, &spara, &spos);

// 추가된 부분 start
CString strID = _T(“”);
CComPtr pctrl = hwpObject.get_ParentCtrl();
if (pctrl)
{
CDHwpCtrlCode_A dctrlcode;
dctrlcode.AttachDispatch(pctrl);

				// 얻어온 부모 컨트롤이 표가 맞나 확인한다.
				// 표 안에 있어야 머리말 정보
				strID = dctrlcode.get_CtrlID();
				if (!strID.Compare(_T("tbl")))
				{
					long seccnt = 0, secno = 0, prnpageno = 0, colno = 0, Line = 0, pos = 0;
					short over = 0;
					CComBSTR	ctrlname = _T("");// BSTR은 안 됩니다.반드시 CComBSTR로 합니다.
					BOOL	bSuccessKeyIndicator = hwpObject.KeyIndicator(&seccnt, &secno, &prnpageno, &colno, &Line, &pos, &over, &ctrlname);
					if (bSuccessKeyIndicator)
					{
					}
				}
			}
			else
			{
			}

// 추가된 부분 end
}
}
ReleaseScan();

시나리오는 다시 언급합니다.
[1] 문서의 하단에 표가 있는 문서를 Open합니다. (문서는 클 수록 오류가 발생할 확률이 높습니다.)
[2] InitScan, GetTextCarat, ReleaseScan을 합니다.
[3] 문서에 여러 줄을 추가합니다.
[4] Clear함수를 호출합니다.

2개의 좋아요

MDI에 자식으로 붙이면 발생 빈도가 높아집니다.

2개의 좋아요

제가 여러 가지로 확인한 결과
[1] 한글 문서를 Open한 후에 CHwpObject를 사용한 함수를 너무 많이 호출하고 사용자가 문서에 한 줄 이상을 추가한 후에 Clear함수를 호출할 때, “서버에서 예외 오류가 발생했습니다.” 메시지가 뜨는 것으로 보입니다.
[2] 그래서 큰 문서를 사용했을 때, 문서 순회(InitScan, GetText, ReleaseScan)를 하면 발생 빈도가 높아지는 것으로 보입니다. 그만큼 호출되는 함수의 횟수가 많아지니까요.
[3] 또한 이유는 모르겠지만 MDI에 붙였을 때, 발생 빈도가 높아집니다.

결론 : 메모리같이(메모리는 아닙니다.) 특정값이 일정 용량(Capacity)을 넘어서면 Clear함수에서 문제가 발생합니다.
제가 보기에 이 정도 정보면 "한글과 컴퓨터"에서도 해당 문제를 발견했다고 생각이 듭니다.
발견하셨으면 또는 발견 못 하셨어도 답변을 주시기 바랍니다.
발견 못 하셨으면 더 시나리오를 찾아봐야 하기 때문입니다.
하지만 이 정도 시나리오면 발견할 수 있다고 생각합니다.

InitScan, ReleaseScan에서 커서 이동(SetPos)같은 함수나 마지막에 언급한 KeyIndicator같은 함수를 여러개 호출하면 발견할 수 있습니다.

2개의 좋아요

안녕하세요 ,
해당건은 확인중에 있으나, 다른 업무도 있어 바로바로 확인이 어렵습니다.
기다려주시면 감사하겠습니다.
재현 여부 확인 되면 댓글로 남겨두겠습니다.

2개의 좋아요

답글 주셔서 감사합니다.
재현 여부 확인 되면 성공과 실패 여부 상관없이 답글 꼭 부탁드립니다.

2개의 좋아요

안녕하세요. 한컴디벨로퍼입니다.
해당 [제품 문의] 관련하여 적절한 답변을 받지 못하신 것에 대해 사과드립니다.

정성스레 작성해주신 해당 문의 관련하여 답변은 이곳으로 드리겠사오니 이점 양해 부탁드립니다.

언제나 관심을 가지고 문의를 주셔서 감사합니다.

한컴디벨로퍼 드림.

2개의 좋아요

해당 Clear함수를 예외처리로 감싸서 오류 메시지창이 나오지 않게 처리하였습니다.
try
{
m_ctrlHwp->Clear(COleVariant((short)option));
}
catch (CException* ex)
{
}
일단 오류가 나오지 않게 회피하였습니다. 급한 불만 껐습니다.

하지만 확인해보시지 않아도 된다는 의미는 아닙니다.
감사합니다.

2개의 좋아요

PC 사양에 따라 가끔씩 이런 문제가 발생하는 듯 싶기도 합니다.
저사양 노트북과, 최근 구매한 노트북으로 동일 코드를 돌렸을 때
저사양 PC에서만 오류가 나거나 코드 일부가 씹히는 경우가 있더라고요.

이 부분도 한 번 체크해보시기 바랍니다^^

1개의 좋아요

안녕하세요,
해당 부분 관련하여 확인 완료하였습니다.
많은 양의 데이터를 복사붙여넣기 스캔하기 등의 동작을 준뒤 Clear시 내부 데이터 처리를 해야하기때문에 응답시간이 걸리는 경우가 있습니다.
그럴때 UI 업데이트시 오류가 발생할수 있는데 그때 서버에서 예외 오류가 발생했습니다. 라는 오류 메세지가 뜰수있는 부분 확인했습니다.

해당 부분은 내년 패치에 수정될것 같습니다.
감사합니다.

3개의 좋아요