안녕하세요.
C# 으로 만든 코드를 빌드하는 방법을 몰라서 문의 드립니다. (C# 완전초보입니다.)
개발환경은
윈도우11 / 비주얼스튜디오2022 / C# / 아래한글 Neo 입니다.
새프로젝트는 Windows Forms 앱(.NET Framework 4.7.2) 로 만들었습니다.
HwpObject 1.0 Type Library 도 참조추가 하였습니다.
코드는 아주 간단한 윈폼에서 버튼을 누르면 이미 열려있는 아래한글 문서에 글자를 쓰는겁니다.
(포럼 눈동냥으로 혼자 끙끙대면서 만들어봤습니다.)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HwpObjectLib;
namespace 간단폼_빌드
{
public partial class Form1 : Form
{
[DllImport("ole32.dll")]
static extern int CreateBindCtx(uint reserved, out IBindCtx ppbc);
[DllImport("ole32.dll")]
private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// get Running Object Table ...
IRunningObjectTable Rot;
GetRunningObjectTable(0, out Rot);
// get enumerator for ROT entries
IEnumMoniker monikerEnumerator = null;
Rot.EnumRunning(out monikerEnumerator);
IntPtr pNumFetched = new IntPtr();
IMoniker[] monikers = new IMoniker[1];
IBindCtx bindCtx;
CreateBindCtx(0, out bindCtx);
string name;
while (monikerEnumerator.Next(1, monikers, pNumFetched) == 0)
{
monikers[0].GetDisplayName(bindCtx, monikers[0], out name);
if (name.CompareTo("!HwpObject.96.1") == 0)
{
IHwpObject hwp;
object obj;
Rot.GetObject(monikers[0], out obj);
hwp = (IHwpObject)obj;
var act = hwp.CreateAction("InsertText");
var pset = act.CreateSet();
string text = "버튼을 눌렀습니다.";
pset.SetItem("Text", text);
act.Execute(pset);
hwp.Run("BreakPara"); // 문단 나누기 (엔터)
}
}
}
}
}
비주얼스튜디오 에서 실행 하였을경우 아래 그림처럼 잘 작동을 합니다.
이것을 다른 pc 에서 사용하기 위해 솔루션 빌드를 누르면
이런식으로 Debug 폴더에 파일이 생김니다.
이게 정상적으로 빌드가 된게 맞나요?
제 목표는 dll 파일 포함한 단일 exe 파일로 빌드 하는건데 구글링, gpt 등등 검색해봐도 힘드네요.
gpt 는 Costura.Fody 를 사용하여 빌드해보라고 하는데 시키는데로 해도 단일파일 exe 로는 안나오네요.
C#이 처음이다 보니 너무 초보적인 질문인거 같아서 민망합니다.