【发布时间】:2013-06-28 05:41:14
【问题描述】:
我正在尝试调用TrackPopupMenu 函数以在运行时从托管的 VB.NET 代码中显示菜单。
以下是我得到的错误:
检测到 PInvokeStackImbalance 消息:对 PInvoke 函数的调用 'UeWIPopupX!UeWIPopupX.mDeclares::TrackPopupMenu' 不平衡 堆栈。这可能是因为托管的 PInvoke 签名确实 与非托管目标签名不匹配。检查调用 PInvoke 签名的约定和参数与目标匹配 非托管签名。
下面是我用于 TrackPopupMenu 函数的声明:
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True, CallingConvention:=CallingConvention.StdCall)> _
Friend Function TrackPopupMenu(ByVal hMenu As Long, ByVal wFlags As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nReserved As Integer, ByVal hWnd As IntPtr, ByVal lprc As RECT) As Integer
End Function
下面是调用TrackPopupMenu函数的代码:
dim lpRc as RECT
Dim tP As POINTAPI
Dim lR as Integer
Dim lUn as Integer
lUn = TPM_RIGHTBUTTON Or TPM_TOPALIGN Or TPM_LEFTALIGN Or TPM_RETURNCMD
tP.x = 50
tP.y = 100
'Here I am getting the error
lR = TrackPopupMenu(m_ppMenu.Tools(1).hMenu, lUn, tP.x, tP.y, 0, m_hWndOwner, lpRC)
下面是矩形RECT的声明:
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Structure RECT
Dim Left As Integer
Dim Top As Integer
Dim Right As Integer
Dim Bottom As Integer
End Structure
TrackPopupMenu 调用过程中的所有参数都有一些值。 我尝试了不同的调用约定,但仍然出现错误。
我无法解决这个问题。有谁知道如何解决这个问题?
【问题讨论】:
标签: vb.net marshalling unmanaged managed vb6-migration