首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VB.NET 如何正確宣告與呼叫 Windows API CreateWindowEx?

     編輯:程式設計綜合問答

在 VB.NET 專案中若需直接呼叫 Windows 核心 API CreateWindowEx 建立原生視窗,必須透過 P/Invoke 正確宣告簽章,否則易發生堆疊不平衡或存取違規錯誤。

標準宣告範例

<System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
Public Shared Function CreateWindowEx(
    dwExStyle As Integer,
    lpClassName As String,
    lpWindowName As String,
    dwStyle As Integer,
    x As Integer,
    y As Integer,
    nWidth As Integer,
    nHeight As Integer,
    hWndParent As IntPtr,
    hMenu As IntPtr,
    hInstance As IntPtr,
    lpParam As IntPtr
) As IntPtr
End Function

關鍵注意事項

  • CharSet:=CharSet.Auto:自動依專案 Unicode/ANSI 設定對應 CreateWindowExW 或 CreateWindowExA。
  • 參數類型對應:C/C++ 的 HWND、HINSTANCE 在 VB.NET 皆對應 IntPtr;DWORD 對應 Integer(32 位元無號,VB.NET 無無號整數,若超過 Int32.MaxValue 需用 Long 並轉換)。
  • SetLastError:=True:失敗時可呼叫 Marshal.GetLastWin32Error() 取得錯誤碼。

實用參考資源

強烈建議參考 pinvoke.net 上社群驗證過的簽章,以及 Calvin Hsia 的部落格 深度解析,避免重複造輪子踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved