[질문] c#에서 Active_XHwpDocument 사용법 질의입니다.

public HwpObject hwp = new HwpObject();

위와 같이 오토메이션 프로그램으로 처음에 한글 오브젝트를 선언하면 자동으로 새문서가 열립니다.
이후에 강제로 해당 문서를 종료하고 다른 문서를 열려고 하면 RPC연결이 없다는 에러가 나옵니다.
아마도 처음 선언할 때 연결된 한글문서가 없어서 그런 것 같습니다.
별도로 RPC연결 여부를 확인할 메서드가 없다고 하시면서
Active_XHwpDocument 를 활용해서 해당 연결여부를 체크 가능하다고 하셔서 해볼려고 했습니다.

그래서 현재 rpc연결로 활성화된 문서가 있는지 체크해서 활성화된 문서가 없으면
RPC연결이 끊어진걸로 보고 새문서를 불러올려고 하는데요.

var aa = hwp.XHwpDocuments.Active_XHwpDocument();
위와 같이 코딩하니 리턴이 오브젝트로 오는데 이걸 어떻게 활성화된 문서가 있는지 여부 및
해당 객체를 어떻게 처리할지를 모르겠습니다.

1개의 좋아요

안녕하세요 ^^
한글 오토메이션의 경우 한글을 OLE 서버로 이용하여
HwpObject를 Ole Client로 api를 이용하는 기능입니다.

처음 HwpObject를 생성하면 한글을 다른 프로세스로 생성하게 되고 해당 HwpObject에 연결이 됩니다.
종료하셨을떄 RPC연결이 없다는 에러가 나오는경우는 문서만 종료한게 아니라 한글 프로세스 자체가 종료된것으로 보입니다.
이럴 경우 새로이 HwpObject를 생성하셔야할것 같습니다.

한글의 하나의 프로세스에서 여러개의 문서를 열 수있습니다.
이렇게 여러개 열린 문서를 제어하기 위해 XHwpDocuments 라는 오브젝트가 있는거구요,
열린 문서들을 XHwpDocument 오브젝트로 관리하게 되는것입니다.

처음 한글 오토메이션을 실행시키면 XHwpDocuments에 기본 XHwpDocument가 생성되고 그 문서에 한글의 빈문서 파일이 열려있게 됩니다.

어떻게 응용하실지 모르겠지만 하나의 도큐먼트에서만 처리를 하신다면

HwpObject에서 Close api를 이용하면 현재 문서를 닫게되고, 활성화된 XHwpDocument에서 문서가 닫히고 기본 빈문서로 열리게 됩니다.
이상태에서 새로운 문서를 HwpObject에서 Open을 이용해서 여시면 될것 같습니다.

감사합니다 ^^

2개의 좋아요

내 답변 감사합니다.

사용자가 임의로 한글 프로세스를 종료시켜서 새로운 HwpObject를 생성해야할지 말지를 판단하기 위해서는
기존 생성된 개체가 있는지 여부를 알아야 하기에 질의 드렸습니다.

전에 비슷한 질문에서 Active_XHwpDocument를 쓰라고 하셨는데,
c#에서 해당 메서드? 사용법을 좀 알려주십사 합니다.

2개의 좋아요

꼼수로 일단 해결은 했습니다.
참고 하실 분 계실 것 같아서 코드는 남겨둡니다.

※ 혹시 질의 드렸던 Active_XHwpDocument를 사용하는 예제 코드를 알려주시면 감사하겠습니다.

void _Open(string path)
{
try
{
hwp.Open(path, “”, “”);
}
catch (Exception)
{
hwp = new HwpObject(); //에러면(연결 종료시) 새로 객체 생성함.
hwp.XHwpWindows.Item(0).Visible = true;
hwp.RegisterModule(“FilePathCheckDLL”, “FilePathCheckerModuleExample”);
hwp.Open(path, “”, “”);
}
}

2개의 좋아요

안녕하세요
Active_XHwpDocument를 사용하는 부분은 한글 연결이 살아있을때 사용 가능한 방법입니다 ㅠ …!
user63님 상황에선 사용이 불가능합니다.
작성해주신 코드대로 try catch를 통해 api 오류를 체크하는 수밖에 없을것 같습니다.

3개의 좋아요