代码之家  ›  专栏  ›  技术社区  ›  Ali Tarhini

为什么windows win32函数在windows 7上引发AccessViolationException

  •  2
  • Ali Tarhini  · 技术社区  · 14 年前
    Private Declare Function CascadeWindowsNative Lib "user32" Alias "CascadeWindows" ( _
       ByVal hwndParent As Long, _
       ByVal wHow As Long, _
       ByVal lpRect As Long, _
       ByVal cKids As Long, _ 
       ByVal lpkids As Long) As Integer
    

    打电话:

    CascadeWindowsNative(Nothing, &H4, 0, 0, 0)
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   JaredPar    14 年前

    这里的主要问题是传递句柄值时 Long 类型。这是不正确的,它们需要通过 IntPtr 类型。钩子下的句柄本质上是指针,大小取决于进程是32位还是64位。

    我不熟悉这个API,所以我不知道其余的参数是否正确。上的示例代码PInvoke.Net建议将其中几个输入到

    这里可能发生的情况是,您正在运行的一台计算机是64位的,pinvoke调用正在工作,而另一台是32位的,由于固有的堆栈不平衡,调用正在失败。

        2
  •  1
  •   Ali Tarhini    14 年前

    这样做有效:

    Private Declare Function CascadeWindowsNative Lib "user32" Alias "CascadeWindows" (ByVal hwndParent As IntPtr,
                                                                                       ByVal wHow As UInt32,
                                                                                       ByVal lpRect As IntPtr,
                                                                                       ByVal cKids As UInt32,
                                                                                       ByVal lpkids() As IntPtr) As Integer