CsWin32는 사용자가 정의한 Win32 P/Invoke 메서드 및 지원 유형을 C# 프로젝트에 추가하는 소스 생성기 프로젝트 입니다.
- 소스 생성기를 이용하므로 프로젝트에 불필요하게 사용하지 않는 P/Invoke 정보가 없어 사이즈를 줄일 수 있습니다.
- C#에서 바로 사용할 수 있는 P/Invoke 메소드를 빠르게 추가할 수 있습니다.
- SafeHandle 형식이 자동으로 생성됩니다.
- XML 설명서를 생성하고 docs.microsoft.com 로 이동할 수 있는 링크를 통해 상세 정보를 확인할 수 있습니다.
다음처럼,
dotnet add package Microsoft.Windows.CsWin32 --prerelease
패키지를 추가한 후 (현재 미리보기 상태입니다), csproj 설정에 AllowUnsafeBlocks
를 true
로 줘 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);
}
...
등으로 사용할 수 있게 되니다.