ClipCursor函數引用注意

 
  1. 寫了一個鼠標鎖程序,但是ClipCursor函數的.net下調用卻出了點問題。以下是代碼,調試時出現
  2. [quote]對 PInvoke 函數“鼠標鎖!鼠標鎖.Form1::ClipCursor”的調用導致堆棧不對稱。原因可能是託管的 PInvoke 簽名與非託管的目標籤名不匹配。請檢查 PInvoke 簽名的調用約定和參數與非託管的目標籤名是否匹配。[/quote]
  3. 查找了MSDN中API函數在.net上運行發現,在VB6中的數據類型long在VB2005中要變成integer,我改過來,但是仍然出現錯誤。先在這裏描述一下問題,等待解決問題的時候,會將結果寫出來。
  4. Public Class Form1
  5.     Public Structure RECT
  6.         Dim Left As Integer
  7.         Dim Top As Integer
  8.         Dim Right As Integer
  9.         Dim Bottom As Integer
  10.     End Structure
  11.     Public Declare Function ClipCursor Lib "user32" (ByVal lpRect As RECT) As Integer
  12.     Public Sub lockMouse()
  13.         Dim lockRECT As RECT
  14.         lockRECT.Left = 0
  15.         lockRECT.Top = 0
  16.         lockRECT.Right = 0
  17.         lockRECT.Bottom = 0
  18.         ClipCursor(lockRECT)
  19.     End Sub
  20.     Public Sub openMouse()
  21.         Dim openRECT As RECT
  22.         openRECT.Left = 0
  23.         openRECT.Top = 0
  24.         openRECT.Right = Me.Width
  25.         openRECT.Bottom = Me.Height
  26.         ClipCursor(openRECT)
  27.     End Sub
  28.     Private Sub btnLock_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnLock.Click
  29.         lockMouse()
  30.     End Sub
  31.     Public password As String
  32.     Private Sub btnSetPassword_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnSetPassword.Click
  33.         Try
  34.             password = InputBox("請輸入你的密碼:")
  35.         Catch ex As Exception
  36.             MsgBox("請輸入正確有效的密碼", MsgBoxStyle.OkOnly)
  37.         End Try
  38.     End Sub
  39.     Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
  40.     End Sub
  41.     Private Sub btnOpen_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnOpen.Click
  42.         Dim OpenPassword As String
  43.         Try
  44.             OpenPassword = InputBox("請輸入密碼:")
  45.             If OpenPassword = password Then
  46.                 openMouse()
  47.             Else
  48.                 MsgBox("密碼錯誤")
  49.             End If
  50.         Catch ex As Exception
  51.             MsgBox(ex.Message)
  52.         End Try
  53.     End Sub
  54. End Class

出現錯誤的原因出於聲明變量的方式上。

之前是用byval按值傳遞,因爲它傳遞的是數值,如果每次按值傳遞的話,原函數是指針傳遞,就會出現參數類型不符,所以應該用Byref.

發佈了23 篇原創文章 · 獲贊 1 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章