回 帖 发 新 帖 刷新版面

主题:请教Null和VbNullString的问题?


请高手们帮解释解释在VB6中这些东西意思和用法:

Null,VbNullString

谢谢了。

回复列表 (共8个回复)

沙发

vbNull:      1
Null:        空对象(不能用if ** = Null Then直接判断,只能用IsNull(**))
vbNullChar:  空字符(相当于C里面的'\0')
vbNullString:空字符串(也就是一个字符串也没有,甚至没有字符串自身的描述,本质上是一个常数0)

另外,如果楼主觉得我讲的对你有帮助,评10分就行了,呵呵,9990分好看。谢谢

板凳

[quote]
vbNullString:空字符串(也就是一个字符串也没有,甚至没有字符串自身的描述,本质上是一个常数0)
[/quote]

这样?
使用API中的findwindowex时参数用vbnullstring找得到窗口,用0却不行-_-|||

3 楼


评你10分了,

但我与merry05一样,对VB6里的这些东西依旧感觉很含糊。

4 楼

vbnullstring是一个4字节的空值,传输进api中一般要这样  0&

5 楼


to brokenworld:

听你这样解释,我有点懂了。

6 楼

字符串的本质问题。
字符串是由两部分组成:一个指针和一个Unicode字符数组
vbNullString就是一个只有第一部分而没有第二部分的字符串

7 楼

[quote][quote]
vbNullString:空字符串(也就是一个字符串也没有,甚至没有字符串自身的描述,本质上是一个常数0)
[/quote]

这样?
使用API中的findwindowex时参数用vbnullstring找得到窗口,用0却不行-_-|||[/quote]
ByVal lpString As String

此时你传入0的话,VB会自动把你的0变成"0",再把这个字符串指针传给API,也就是说你传入的不是空串了。所以在VB里面字符串传入空串时要特别用vbNullString这个“字符串常数”。

当然,还可以用另外一种方式来理解,把声明改为:
ByVal lpString As Long
再传入0就OK了

另外,我觉得很多人传0时这样写0&,没必要,因为0进行有符号扩展后还是0,编译器还没笨到这个程度:因为你少写一个&而需要插入多余的其它代码

试试下面的实例:
Option Explicit

Private Declare Function [color=0000FF]FindWindow[/color] Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName [color=0000FF]As String[/color]) As Long
Private Declare Function [color=FF00FF]FindWindow_Long[/color] Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName [color=FF00FF]As Long[/color]) As Long

Private Sub Form_Load()
    Dim hwnd1 As Long, hwnd2 As Long
    hwnd1 = [color=0000FF]FindWindow[/color]("Notepad", [color=0000FF]vbNullString[/color])
    hwnd2 = [color=FF00FF]FindWindow_Long[/color]("Notepad", [color=FF00FF]0[/color])
    Debug.Print hwnd1, hwnd2
    Stop
    End
End Sub

8 楼

LS,高!~

我来回复

您尚未登录,请登录后再回复。点此登录或注册