한글 오피스 2024에서 API를 사용한 문서 열기 및 닫기 오류

오토메이션이 아니고, 그냥 한글 오피스를 실행하면, 여러 개의 한글 오피스를 실행해도 1개의 Hwp.exe프로세스가 뜨는 것으로 알고 있습니다.
하지만 프로그램적으로 오토메이션을 사용하면, 여러 개의 Hwp.exe프로세스가 뜨고 있었습니다. 이 부분 때문에, 뭔가 개선을 시도한 것으로 생각됩니다.
저희는 어떻게 구현을 변경해야 하는지 가이드 부탁드립니다.

오토메이션 할 때,
2024 이전 버전에서는 다중-인스턴스가 되었는데
2024부터는 안되는 걸로 압니다.

방법을 달리하면 가능은 합니다만… 원하시는 건지는 잘 모르겠네요.

multi instance3

2개의 좋아요

안녕하세요~
위에도 말씀드렸듯이 싱글턴 방식으로 오토메이션을 사용해야할것 같습니다.
디벨로퍼 센터는 개발자들이 api 사용에 대하여 가이드를 드리는 사이트여서 프로그램의 전체적인 구현설계에 가이드를 드리긴 어려울것 같습니다 ^^
감사합니다.

이 동영상을 보니, 한글 오피스2024도 여러 프로세스가 지원된다는 점을 이해하였습니다.
혹시 해당 샘플을 받을 수 있을까요?
C#인거 같긴 한데, 제가 기술적으로 계속 질문을 하는 것보다 그 방법이 더 빠를 거 같습니다. (이게 가능하다면 하단의 내용은 읽어보실 필요없습니다.)

그게 어렵다면, 객체 한 개만으로 어떻게 여러 프로세스를 만드는지에 대한 질문을 계속 하게 될 것 같습니다.
CHwpObject객체에서 CreateDispatch(_T(“HWPFrame.HwpObject.1”))함수를 호출하면, 프로세스가 생깁니다.
여러 프로세스를 만들고 제어하기 위해서 어떤 값(어떤 방식)을 사용해야 하는지 의문이 듭니다.

주신 예제로 보자면
void CHwpAutomationTestDlg::OnBnClickedButton1()
{
int repeat = 3;

for (int i = 0; i < repeat; i++) {
	ConnectHwp();
	DisconnectHwp();
}

}
가 아닌
void CHwpAutomationTestDlg::OnBnClickedButton1()
{
int repeat = 3;

for (int i = 0; i < repeat; i++) {
	ConnectHwp(i);
}
for (int i = 0; i < repeat; i++) {
	DisconnectHwp(i);
}

}
를 해야 합니다.
저도 싱글턴 방식(Singleton)은 이해하고 있습니다.

메시지 보내드렸습니다. 확인 바랍니다.

1개의 좋아요

완전히 감사드립니다. 확인해보겠습니다.

제가 생각했던 방법은 아닙니다.
저는 내부적으로 싱글톤 방식(Singleton)으로 처리해서 CHwpObject는 한 개이고, 프로세스는 여러 개 띄우는 방식을 구현했다고 생각했습니다.

결정적으로 Thread에서는 CHwpObject의 함수를 사용하면 죽어버립니다.
(C++에서는 쓰레드에서 동작하는 API가 있는데 한글 오피스의 API가 해당하는 것으로 보입니다.)
Visual Basic에서는 모르겠지만, Visual Studio(C++)에서는 그렇습니다.

쓰레드를 사용하지 않으면, 여러 프로세스를 띄우는 것이 불가능한 건가요?

오타가 있어서 수정합니다. “쓰레드에서 동작하는 API”=> “쓰레드에서 동작하지 않는 API”

오토메이션이 한글 오피스 2018, 2020, 2022에서는 여러 프로세스가 뜰 수 있게 되어있었는데, 2024에서 갑자기 여러 프로세스를 처리할 수 없게 변경된 이유가 뭔가요?
저희 제품은 여러 문서를 띄울 수 있다는 전제에서 구현되어 있는데, 갑자기 안 된다고 하시면 저희는 좀 곤란합니다.
여러 프로세스를 띄울 수 없는 건지, 여러 문서를 띄울 수 없는 건지도 확실히 할 필요가 있을 거 같습니다.

아니면, 한 개의 프로세스로 어떻게 여러 문서를 띄울 수 있는지 알려주세요.

1개의 좋아요

hwp.HAction.Run("FileNew")는 새 창을,
hwp.HAction.Run("FileNewTab")은 새 탭을 엽니다.
hwp.XHwpWindows.Item(n).Active_XHwpDocument()으로 n번째 문서를 활성화할 수 있고요.
(제 기억으론 창은 최대 30개, 창마다 탭도 최대 30개 열 수 있었습니다. 충분할 듯.)

파이썬에서는 위와 같이 구현하는데, 아마 다른 언어에서도 비슷하게 구현되지 않을까 생각합니다^^
도움이 되었길 바랍니다. 행복한 하루 되세요!!!ㅎ

2개의 좋아요

그동안의 글을 보면서 프로세스 1개인 상태에서 여러 개의 문서를 여는 방식으로 해야 한다는 점을 인지하였습니다. 그리고 그 방식으로 시도를 해보고 있습니다.
CHwpObject을 사용해서, CreateDispatch으로 프로세스를 생성하고 있습니다.
그리고 CXHwpDocument으로 문서를 열어서 처리하려고 시도하고 있습니다.
맞나요?

하지만, 그동안의 방식이 아니어서 처리 과정에서 어려움을 겪고 있습니다.
혹시 파이썬으로 작성된 샘플 문서가 있다면, 도움이 될 것 같습니다.
없으시면, 없으시다고 글만 적어주시기 바랍니다.