首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

PInvoke 函数GetSystemMenu的调用导致堆栈不对称如何理解

2012-06-05 
PInvoke 函数GetSystemMenu的调用导致堆栈不对称怎么理解API声明Private Declare Function GetSystemMenu

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);

热点排行