PInvoke 函数GetSystemMenu的调用导致堆栈不对称怎么理解
'API声明
Private Declare Function GetSystemMenu Lib "User32 " (ByVal hwnd As Integer, ByVal bRevert As Long) As Integer
Private Declare Function RemoveMenu Lib "User32 " (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
Private Declare Function DrawMenuBar Lib "User32 " (ByVal hwnd As Integer) As Integer
Private Declare Function GetMenuItemCount Lib "User32 " (ByVal hMenu As Integer) As Integer
Private Const MF_BYPOSITION = &H400&
Private Const MF_DISABLED = &H2&
'窗体关闭功能失效
Private Sub DisableX(ByVal wnd As Form)
Dim hMenu As Integer
Dim nCount As Integer
'得到系统Menu
hMenu = GetSystemMenu(wnd.Handle.ToInt32, 0)
'得到系统Menu的个数
nCount = GetMenuItemCount(hMenu)
'去除系统Menu
Call RemoveMenu(hMenu, nCount - 1, MF_BYPOSITION Or MF_DISABLED)
'重画MenuBar
DrawMenuBar(Me.Handle.ToInt32)
End Sub
运行到:
“ hMenu = GetSystemMenu(wnd.Handle.ToInt32, 0)”
提示:对 PInvoke 函数“ReadText!ReadText.FrmReport::GetSystemMenu”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
[解决办法]
Private Declare Function GetSystemMenu Lib "User32 " (ByVal hwnd As Integer, ByVal bRevert As Long)
===》
Private Declare Function GetSystemMenu Lib "User32 " (ByVal hwnd As Integer, ByVal bRevert As int) 红字
[解决办法]
public static extern IntPtr GetSystemMenu(IntPtr hwnd, int flag);