为什么在VB.net中申明API函数时要把long改为int32?解决办法
为什么在VB.net中申明API函数时要把long改为int32?
我使用findwindow函数,
在VB中如下正确使用
Public Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
但在VB2005中要把long改为int32才可以,不知何故啊?是不是vb中的long相当于VB.net中的int32啊?VB和VB.net中的long有什么区别?
------解决方案--------------------
long在内存占8字节,int32占4字节
------解决方案--------------------
楼上正解
------解决方案--------------------
一直到6.0时代,VB中的Integer都是16位的,Long是32位的;而从.NET开始,VB中的Integer变成32位(Int32),而Long变成64位(Int64),与C系列语言看齐。即过去的Long现在变成Integer了。而我们通常看到的API函数的定义还是6.0时代的,所以如果不进行重新定义的话就会导致堆栈错误。
------解决方案--------------------
类型长度变啦
------解决方案--------------------
在VB.NET中不用As Long了,Integer本身和API中的整数大小是一样的了.
我使用findwindow函数,
在VB中如下正确使用
Public Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
但在VB2005中要把long改为int32才可以,不知何故啊?是不是vb中的long相当于VB.net中的int32啊?VB和VB.net中的long有什么区别?
------解决方案--------------------
long在内存占8字节,int32占4字节
------解决方案--------------------
楼上正解
------解决方案--------------------
一直到6.0时代,VB中的Integer都是16位的,Long是32位的;而从.NET开始,VB中的Integer变成32位(Int32),而Long变成64位(Int64),与C系列语言看齐。即过去的Long现在变成Integer了。而我们通常看到的API函数的定义还是6.0时代的,所以如果不进行重新定义的话就会导致堆栈错误。
------解决方案--------------------
类型长度变啦
------解决方案--------------------
在VB.NET中不用As Long了,Integer本身和API中的整数大小是一样的了.