오류 확인 부탁드립니다.

안녕하세요.
오토메이션 코딩 중 아래와 같은 문제가 있어서 확인 부탁 드립니다.

  1. 파라미터셋 HInsertFile의 KeepSection 속성이
    한글 2024 버전에서는 적용되지 않습니다.
    속성 값 0, 1에 상관없이 0으로 적용되는 것 같습니다.
    반면 한글 2022 버전에서는 제대로 값에 따라 작동 됩니다.

  2. 파라미터셋 HPrint의 RangeIncludeLinkedDoc 속성이
    한글 2022 버전에는 누락된 것 같습니다.
    한글 2024 버전에는 속성이 포함되어있고, 제대로 작동 됩니다.

  3. HPrint와 관련하여 덧붙이자면, 동일한 코드임에도 불구하고
    한글 2024가 설치된 시스템에서 컴파일해서 실행하면 제대로 작동하는 데,
    실행 파일을 한글 2022가 설치된 시스템으로 가져가서 실행하면
    실행 중 작동이 멈추고 종료됩니다.
    반대로 한글 2022가 설치된 시스템에서 컴파일해서 실행하면 작동하는 데,
    실행 파일을 한글 2024가 설치된 시스템으로 가져가서 실행하면
    실행 중 작동이 멈추고 종료됩니다.

컴파일 환경은 vb.net 이며,
내장 매크로에서도 실행하여 확인 확인하였습니다.
수고하세요.

1개의 좋아요

안녕하세요

  1. 말씀하신 버그 사항 확인했고 담당 팀에 전달해서 수정하겠습니다.

  2. 2024에서도 RangeIncludeLinkedDoc은 안 쓰이고 Range로 쓰이는데 어떻게 확인하셨는지 알 수 있을까요? Range(0 = 문서전체 (연결된 문서 포함), 6 = 현재 문서 (연결된 문서 미포함))로 쓰시는 것을 추천드립니다.

  3. 혹시 어떻게 구현했는지 알 수 있을까요? 실행 환경에서 오토메이션 등록은 잘 되어 있는지요?
    단순히 GetDefault하고 바로 Execute 호출하는 코드만 만들었을 때는 다른 pc의 실행 환경(2022,2024)에 상관없이 동작했습니다.

감사합니다.

1개의 좋아요

답변 감사합니다.

2.관련하여
한글 2024 매크로 기록 (연결된 문서 포함 체크 해제한 경우)

(한글 2024 + vb .net)에서 코딩할 때 RangeIncludeLinkedDoc 속성이 포함되어 있는 사진

  1. 각각 (한글 2022 / 한글 2024)에서 컴파일 된 실행파일은 실행되나
    크로스로 실행하면 작동이 되지 않습니다. 중간에 실행파일이 종료 됩니다.
1개의 좋아요

2번 사항은
말씀해주신 대로 사용해 보겠습니다.

1개의 좋아요

안녕하세요.
위의 질문 중 3번 다시 질문 드립니다.

시스템1:
windows11 / visual studio 2022 (vb. net) / 한글2024 => 컴파일 실행파일1

시스템2:
windows11 / visual studio 2022 (vb. net) / 한글2022 => 컴파일 실행파일2

실행파일1은 시스템1에서 잘 작동합니다.
그런데 시스템 2로 가져가서 실행(문서 오픈)하면 그냥 종료됨

실행파일2 역시 시스템2에서 문제 없습니다.
그런데 시스템1로 가져가서 실행(문서 오픈) 하면 프로그램 종료됨

시스템3:
windows10 / 한글2024 => 실행파일1 문제없음

시스템4:
windows10 / 한글2022 => 실행파일1 실행(문서 오픈) 하면 프로그램 종료됨

코드는 동일하며 단순 문서 오픈만 하는 겁니다.
예전엔 그렇지 않았던 것 같은데…
제가 잘못하고 있는 게 뭔지 알려주시면 감사하겠습니다.

코드 내용

Imports HwpObjectLib

Public Class frmMain
	Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
		Dim myHwp As New HwpObject
		myHwp.RegisterModule("FilePathCheckDLL", "SecurityHwpAutomation")
		myHwp.XHwpWindows.Item(0).Visible = True
		myHwp.Open ("C:\test.hwpx", Nothing, Nothing)
	End Sub
End Class

=================================================
참고로…
질문 내용의 프로젝트 방식은 .net core방식으로 에러 메시지 없이 종료되지만
.net framework 방식으로 바꿔서 컴파일한 실행파일을 실행하면
아래와 같은 메시지가 뜹니다.
(시스템1에서 컴파일한 실행파일을 시스템2에서 실행한 결과)

에러 메시지 자세한 내용은 아래와 같습니다.

이 대화 상자 대신 JIT(Just-in-time) 디버깅을 호출하는
방법에 대한 자세한 내용은 이 메시지의 뒷부분을 참조하십시오.

************** 예외 텍스트 **************
System.Runtime.InteropServices.COMException (0x800706F4): 널 참조 포인터를 스텁에 전달했습니다. (예외가 발생한 HRESULT: 0x800706F4)
   위치: HwpObjectLib.IHwpObject.RegisterModule(String ModuleType, Object ModuleData)
   위치: err_Test_fw.Form1.Button1_Click(Object sender, EventArgs e) 파일 D:\Visual Studio 2022\err Test fw\err Test fw\Form1.vb:줄 6
   위치: System.Windows.Forms.Control.OnClick(EventArgs e)
   위치: System.Windows.Forms.Button.OnClick(EventArgs e)
   위치: System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   위치: System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   위치: System.Windows.Forms.Control.WndProc(Message& m)
   위치: System.Windows.Forms.ButtonBase.WndProc(Message& m)
   위치: System.Windows.Forms.Button.WndProc(Message& m)
   위치: System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   위치: System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   위치: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** 로드된 어셈블리 **************
mscorlib
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9290.0 built by: NET481REL1LAST_C
    코드베이스: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
err Test fw
    어셈블리 버전: 1.0.0.0
    Win32 버전: 1.0.0.0
    코드베이스: file:///C:/Users/kosohn/Desktop/Release/err%20Test%20fw.exe
----------------------------------------
Microsoft.VisualBasic
    어셈블리 버전: 10.0.0.0
    Win32 버전: 14.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System.Windows.Forms
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9256.0 built by: NET481REL1LAST_B
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9282.0 built by: NET481REL1LAST_C
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9277.0 built by: NET481REL1LAST_B
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Accessibility
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Runtime.Remoting
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9214.0 built by: NET481REL1LAST_B
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
mscorlib.resources
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ko_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.8.9032.0 built by: NET481REL1
    코드베이스: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ko_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT 디버깅 **************
JIT(Just In Time) 디버깅을 사용하려면 이 응용 프로그램 또는 컴퓨터의
config 파일(machine.config)의 jitDebugging 값을
system.windows.forms 섹션에 설정해야 합니다.
또한 응용 프로그램은 디버깅할 수 있도록 컴파일되어야
합니다.

예:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

JIT 디버깅을 사용하면 처리되지 않은 모든 예외는
이 대화 상자에서 처리되지 않고 컴퓨터에 등록된 JIT
디버거에 보내집니다.
1개의 좋아요

안녕하세요.

최신 패치에서 유사 증상이 발견되어 확인 중에 있습니다.
혹시 현재 개발 중인 한글2024의 버전이 몇 인지 확인 부탁드립니다.

감사합니다.

2개의 좋아요

안녕하세요.
위 질문 내용의 한글 버전은
25년 2월 4일 업데이트 버전입니다.
13.0.0.2098이라고 나옵니다.

그런데 지금 댓글 쓰는 중에 보니 핫픽스 업데이트(2월11일자)가 있네요.
핫픽스 업데이트 후 에러 났던 내용을 다시 확인해 보겠습니다.
감사합니다.

1개의 좋아요

혹시나 해서 핫픽스 업데이트(2월11일자) 후에
3번 질문 내용을 다시 해 보았으나 동일한 증상입니다.

1개의 좋아요

안녕하세요
우선 여러 번 문의를 하게 해드려 죄송합니다 ㅠㅠ

2024 최신 버전에서 Native 언어(C++)로 개발된 프로그램은 문제 없이 동작 하지만 interop 파일을 사용하는 방식으로 개발된 닷넷 프로그램에서 문제를 확인습니다.
수정 방법은 내부에서 검토중입니다.

interop 파일을 사용하지 않는 방법으로 개발 하시면 좋을 것 같습니다.

아래 코드를 참고 부탁드립니다.

Dim myHwp As Object = Activator.CreateInstance(Type.GetTypeFromProgID("HWPFrame.HwpObject.2"))

myHwp.RegisterModule("FilePathCheckDLL", "SecurityHwpAutomation")
myHwp.XHwpWindows.Item(0).Visible = True
myHwp.Open("C:\\Temp\\test.hwpx", Nothing, Nothing)
System.Runtime.InteropServices.Marshal.ReleaseComObject(myHwp)

interop 파일에 대한 설명은 COM Interop in .NET - .NET | Microsoft Learn 참고 하시면 좋을 것 같습니다.

감사합니다.

2개의 좋아요

답변 감사합니다.
말씀해 주신 대로 해 볼게요.

1개의 좋아요

말씀해 주신 대로 하니 이전의 에러는 발생하지 않습니다.

그런데…
아래와 같이 KeyIndicator 메서드를 사용할 수 가 없는 것 같습니다.
이전 interop 방식에서는 동일한 코드로 각종 정보를 알 수 있었는데
새로운 방식에서는 값이 전부 0으로 나옵니다.

vb .net 코드는 아래와 같습니다.

	Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
		Dim myHwp As Object
		myHwp = Activator.CreateInstance(Type.GetTypeFromProgID("HWPFrame.HwpObject.2"))
		myHwp.RegisterModule("FilePathCheckDLL", "SecurityHwpAutomation")
		myHwp.XHwpWindows.Item(0).Visible = True
		myHwp.Open("C:\test.hwpx", Nothing, Nothing)

		Dim a, b, c, d, ee, f As Integer
		Dim g As Boolean, h As String
		myHwp.KeyIndicator(a, b, c, d, ee, f, g, h)
		MsgBox(a)
	End Sub
1개의 좋아요

안녕하세요

KeyIndicator는 7번째 파라미터가 short으로 되어 있습니다. 아래 코드처럼 변경하면 제 pc에서는 동작합니다. 다시 확인 부탁 드립니다.

감사합니다.

	Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
		Dim myHwp As Object
		myHwp = Activator.CreateInstance(Type.GetTypeFromProgID("HWPFrame.HwpObject.2"))
		myHwp.RegisterModule("FilePathCheckDLL", "SecurityHwpAutomation")
		myHwp.XHwpWindows.Item(0).Visible = True
		myHwp.Open("C:\test.hwpx", Nothing, Nothing)

	    Dim seccnt As Integer
		Dim secno As Integer
		Dim prnpageno As Integer
		Dim colno As Integer
		Dim Line As Integer
		Dim pos As Integer
		Dim over As Short
		Dim CtrlName As String = ""
		Dim result As Boolean
		result = myHwp.KeyIndicator(seccnt, secno, prnpageno, colno, Line, pos, over, CtrlName)
	End Sub
1개의 좋아요

답변 감사합니다.

첨부한 gif 동영상에서
button1은 이전 interop방식이고
button2는 위에서 말씀해주신 방식입니다.

keyindicator의 pos를 출력해봤는데
댓글로 말씀해 주신 코드에서는 0으로 나옵니다.

Animation

저도 위 방법으로 했을 때 현재 포지션 정보가 잘 반환되고 있습니다. :thinking:

1개의 좋아요

답변 감사합니다.

제가 했던 방식은 .net(Core) 방식이고
답글 다신 방법은 .net FrameWork 방식인 듯 합니다.

답글 다신 것처럼 .net FrameWork 방식으로 하니 잘 반환 되는데
.net Core 방식으로 하니 안됩니다.

.net Core 방식에서는
keyindicator 뿐만 아니라
XHwpDocumentInfo의 각 속성값 역시 반환이 안됩니다.

아래와 같이 동일한 코드를
.net FrameWork 와 .net core 방식으로 각각 해보면
.net FrameWork방식에서는 정상적으로 반환 되지만
.net core 방식에서는 모두 0으로 반환 합니다.

Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
	myHwp = Activator.CreateInstance(Type.GetTypeFromProgID("HWPFrame.HwpObject.2"))
	myHwp.RegisterModule("FilePathCheckDLL", "SecurityHwpAutomation")
	myHwp.XHwpWindows.Item(0).Visible = True
	myHwp.Open("C:\test.hwpx", Nothing, Nothing)

	myHwp.Run("MoveTopLevelBegin")
	myHwp.Run("MoveLineEnd")

	Dim seccnt As Integer
	Dim secno As Integer
	Dim prnpageno As Integer
	Dim colno As Integer
	Dim Line As Integer
	Dim pos As Integer
	Dim over As Short
	Dim CtrlName As String = ""
	Dim result As Boolean
	result = myHwp.KeyIndicator(seccnt, secno, prnpageno, colno, Line, pos, over, CtrlName)

	Me.Activate()
	MsgBox(pos)

	Dim info As Object = myHwp.XHwpDocuments.Active_XHwpDocument.XHwpDocumentInfo
	MsgBox(info.lines)

	Dim docinfo As Object = myHwp.XHwpDocuments.Active_XHwpDocument.XHwpDocumentInfo
	MsgBox(docinfo.lines)

	'System.Runtime.InteropServices.Marshal.ReleaseComObject(myHwp)
End Sub
1개의 좋아요

저희도 .net core 방식에서는 모두 0으로 반환 되는 문제를 확인했고 방안에 대하여 리서치 하고 있습니다. 우선 .net FrameWork로 개발이 가능하시다면 .net FrameWork로 하시는게 좋을 것 같습니다. :sob:

2개의 좋아요

네… 알겠습니다.
포럼 관계자 분들께
질문마다 친절한 답변 정말 감사하다는 말씀 전합니다.

1개의 좋아요

안녕하세요.
진행과정이 궁금합니다.

기존에 .net core로 해놓은 것들을
.net framework로 모두 변경해야 할지
아니면 기다려야 할지…

첨언:
기존에 해오던 방식들이 안되는 경우가 좀 있습니다.
변경 된건지 아니면 오류인지 잘 안되네요.
어떤 예정이 있는지 궁금합니다.

수고하세요~