CsWin32 (C#/Win32 P/Invoke 소스 생성기) 소개

CsWin32는 사용자가 정의한 Win32 P/Invoke 메서드 및 지원 유형을 C# 프로젝트에 추가하는 소스 생성기 프로젝트 입니다.

  • 소스 생성기를 이용하므로 프로젝트에 불필요하게 사용하지 않는 P/Invoke 정보가 없어 사이즈를 줄일 수 있습니다.
  • C#에서 바로 사용할 수 있는 P/Invoke 메소드를 빠르게 추가할 수 있습니다.
  • SafeHandle 형식이 자동으로 생성됩니다.
  • XML 설명서를 생성하고 docs.microsoft.com 로 이동할 수 있는 링크를 통해 상세 정보를 확인할 수 있습니다.

다음처럼,

dotnet add package Microsoft.Windows.CsWin32 --prerelease

패키지를 추가한 후 (현재 미리보기 상태입니다), csproj 설정에 AllowUnsafeBlockstrue로 줘 unsafe 문을 사용할 수 있도록 합니다.

그런 후 NativeMethods.txt에 필요로 하는 Win32 API를 등록하는 것으로 사용 준비가 끝납니다.

| NativeMethods.txt (예시)

GetDpiForWindow
GetModuleHandle
GetMonitorInfo
GetSystemMetrics
GetWindowRect
LoadImage
MONITORINFO
MonitorFromRect
RECT
SendMessage
SetWindowPos
WM_SETICON

이후, 필요로하는 코드에,

...
        fixed (char* nameLocal = iconName)
        {
            var imageHandle = LoadImage(default,
                nameLocal,
                GDI_IMAGE_TYPE.IMAGE_ICON,
                GetSystemMetrics(SYSTEM_METRICS_INDEX.SM_CXSMICON),
                GetSystemMetrics(SYSTEM_METRICS_INDEX.SM_CYSMICON),
                IMAGE_FLAGS.LR_LOADFROMFILE | IMAGE_FLAGS.LR_SHARED);
            SendMessage(hwnd, WM_SETICON, ICON_SMALL, imageHandle.Value);
        }
...

등으로 사용할 수 있게 되니다.


3개의 좋아요

.NET Framework: 1024. C# - Win32 API에 대한 P/Invoke를 대신하는 Microsoft.Windows.CsWin32 패키지 (sysnet.pe.kr)

1개의 좋아요