为了获取字符串的指针,而非保存字符串的变量的指针,只须在变量名前加上ByVal即可。如:Debug.Print VarPtr(s),VarPtr(ByVal s) '例1
在VB3之前,用这种方法来获取字符串缓冲的指针是非常普遍的。但是由于VB6的UNICODE和ANSI字符串的自动变化机制,和当一个字符串传递给VarPtr函数时,函数执行后所返回的地址是保存临时ANSI字符串的临时ANSI字符串或变量的地址。换句话说,这个地址并不是你声明的变量的真正地址。因此,对于字符串变量以及包括字符串的结构来讲,例1后半段这种用法完全失效了。
可是我像下面这样测试了几次,后两个数字都是一样的:
Debug.Print VarPtr(s), StrPtr(s), VarPtr(ByVal s)
在VB3之前,用这种方法来获取字符串缓冲的指针是非常普遍的。但是由于VB6的UNICODE和ANSI字符串的自动变化机制,和当一个字符串传递给VarPtr函数时,函数执行后所返回的地址是保存临时ANSI字符串的临时ANSI字符串或变量的地址。换句话说,这个地址并不是你声明的变量的真正地址。因此,对于字符串变量以及包括字符串的结构来讲,例1后半段这种用法完全失效了。
可是我像下面这样测试了几次,后两个数字都是一样的:
Debug.Print VarPtr(s), StrPtr(s), VarPtr(ByVal s)
解决方案 »
- 执行程序提示 windows 正在设置 Micrsoft office professional Edition 2003,请稍后
- 关于小数显示
- BETWEEN 施测日期= '" & Text1.Text & "' and 施测日期= '" & Text2.Text & "'
- VarPtr,StrPtr,ObjectPtr到底是什么意思
- 关于用VB下载某网页的一部分.求源码,学习.
- 关于Activereport在使用Access 数据库带密码时的问题
- 如果我想把文件存到指定目录应该怎么办呢?谢谢
- 处理webbrowser弹出的“保存文件”对话框
- Vb程序员薪水调查
- 我怎么才能实现这样的对应,在VC中可以这样写 BYTE *p,*p2;char *buf;在VB中那我怎么实现这个呢?
- 有没有办法让IDE里的模块按函数名排序
- VBA调用C++的dll阿
而到了 VB6,ObjPtr/StrPtr/VarPtr 作为隐藏的内部函数直接提供,就不需要 Unicode-Ansi 自动转换。
看下面内部函数和 Declare 声明函数的比较
Option ExplicitDeclare Function MyVarPtr Lib "msvbvm60" Alias "VarPtr" (Var As Any) As LongSub Main()
Dim s As String
s = "abc"
Debug.Print Hex(StrPtr(s))
Debug.Print Hex(VarPtr(s)), Hex(MyVarPtr(s))
Debug.Print Hex(VarPtr(ByVal s)), Hex(MyVarPtr(ByVal s))
End Sub
'==输出==
'C8B1FBC
'13FBD0 13FB9C
'C8B1FBC F9D87CC