2012-02-26 4 views
0

내 테스트 :삽입 항목

Public Class Form1 

    Public Const WM_SYSCOMMAND As Int32 = &H112 
    Public Const MF_BYPOSITION As Int32 = &H400 
    Public Const MYMENU1 As Int32 = 1000 
    Public Const MYMENU2 As Int32 = 1001 

    Dim hSysMenu As Long 


    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long 
    Public Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" _ 
     (ByVal hMenu As IntPtr, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Boolean 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     MyBase.WndProc(m) 
     If (m.Msg = WM_SYSCOMMAND) Then 
     Select Case m.WParam.ToInt32 
      Case MYMENU1 
       MsgBox("1") 
      Case MYMENU2 
       MsgBox("2") 
     End Select 
     End If 
    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     hSysMenu = GetSystemMenu(Me.Handle, False) 
     InsertMenu(hSysMenu, 5, MF_BYPOSITION, MYMENU1, "My Menu 1") 
     InsertMenu(hSysMenu, 6, MF_BYPOSITION, MYMENU2, "My Menu 2") 

    End Sub 
End Class 

와 나는 오류 얻을 :

PInvokeStackImbalance가 감지 메시지 : PInvoke를 함수에 대한 호출 'WindowsApplication1 WindowsApplication1.Form1 :: GetSystemMenu!'를 스택의 불균형이 있습니다. 관리되는 PInvoke 서명이 관리되지 않는 대상 서명과 일치하지 않기 때문일 수 있습니다. PInvoke 서명의 호출 규칙 및 매개 변수가 대상 관리되지 않는 시그니처와 일치하는지 확인하십시오.

답변

1

Integer으로 바꾸십시오.

+0

잘 작동합니다. –

관련 문제