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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值