承上篇 `Wtypes.h` 核心類型對照,本文提供更完整的 Win32 API 常見類型與 .NET 托管類型對照表,涵蓋指標、陣列、字串、結構體、回呼等進階場景。
| Win32 / C 型別 | .NET 托管型別 | 備註 / MarshalAs 指示 |
|---|---|---|
| BOOL, BOOLEAN | int / bool | [MarshalAs(UnmanagedType.Bool)] (4 bytes) |
| BYTE | byte | UnmanagedType.U1 |
| CHAR | sbyte / byte | ANSI 字元,UnmanagedType.I1/U1 |
| WCHAR / TCHAR (Unicode) | char | UnmanagedType.U2 |
| SHORT | short | UnmanagedType.I2 |
| USHORT / WORD | ushort | UnmanagedType.U2 |
| INT / LONG / LONG32 | int | UnmanagedType.I4 |
| UINT / ULONG / DWORD / DWORD32 | uint | UnmanagedType.U4 |
| LONGLONG / INT64 | long | UnmanagedType.I8 |
| ULONGLONG / DWORD64 | ulong | UnmanagedType.U8 |
| FLOAT | float | UnmanagedType.R4 |
| DOUBLE | double | UnmanagedType.R8 |
| HANDLE / HWND / HMODULE / HINSTANCE / HICON / HCURSOR / HBRUSH / HPEN / HFONT / HBITMAP / HDC / HDWP / HKEY / HRGN / HMENU / HGDIOBJ / HFILE / HMONITOR / HWINSTA / HKL / HRAWINPUT / HTREEITEM / HPALETTE / HMETAFILE / HENHMETAFILE / HGLOBAL / HLOCAL / HRSRC / HSZ / HCONV / HCONVLIST / HDDEDATA / HACCEL / HDROP / ... | IntPtr / nint (C# 9+) | 所有句柄統一用 IntPtr,32/64 位元自動適配 |
| LPSTR / LPCSTR / PSTR / PCSTR | string / StringBuilder | [MarshalAs(UnmanagedType.LPStr)] ANSI 字串 |
| LPWSTR / LPCWSTR / PWSTR / PCWSTR | string / StringBuilder | [MarshalAs(UnmanagedType.LPWStr)] Unicode 字串 (預設) |
| LPTSTR / LPCTSTR / PTSTR / PCTSTR | string / StringBuilder | 隨 TCHAR 定義自動對應 ANSI/Unicode |
| LPVOID / PVOID / LPVOID | IntPtr / byte[] / void* | 通用指標,視用途選 byte[] (陣列) 或 IntPtr (不透明) |
| LPBYTE / PBYTE | byte[] | [In/Out] byte[] |
| LPWORD / PWORD | ushort[] | |
| LPLONG / PLONG / LPINT / PINT | int[] | |
| LPDWORD / PDWORD | uint[] | |
| LPARAM / WPARAM | IntPtr / nint | 訊息參數,32/64 位元不同 |
| LRESULT | IntPtr / nint | 視窗程序回傳值 |
| SIZE_T / SSIZE_T | IntPtr / nuint | 指標大小無號整數 |
| RECT / POINT / SIZE | 結構體 (struct) | [StructLayout(LayoutKind.Sequential)] 對應欄位 |
| GUID / CLSID / IID | Guid | 直接對應 |
| FILETIME | long / DateTime | 100ns 間隔數,DateTime.FromFileTimeUtc |
| SYSTEMTIME | 結構體 | 年月日時分秒毫秒欄位 |
| VARIANT | object | 複雜,建議避免直接互操作 |
| BSTR | string | [MarshalAs(UnmanagedType.BStr)] COM 字串 |
| SAFEARRAY | Array | 極少直接用,建議用 COM Interop |
| 函數指標 / 回呼 | delegate | delegate 簽章需完全匹配 calling convention (StdCall/ThisCall/Cdecl) |