永发信息网

关于VB中VarPtr StrPtr ObjPtr在VS2010中的表示

答案:1  悬赏:70  手机版
解决时间 2021-08-18 16:53
VS2010中不支持VarPtr StrPtr ObjPtr,需要怎样替换?望高人指点!
最佳答案
-----------------------------------------------------,标题:VarPtr、StrPtr和ObjPtr函数的用法" />
输入您的搜索字词
提交搜索表单
Web
搜索VBGood全站内容
- - VarPtr、StrPtr和ObjPtr函数的用法
(0)作者:不详, 平台:VB6.0+Win98, 阅读:12539, 日期:2000-11-27
VarPtr、StrPtr和ObjPtr函数的用法
--------------------------------------------------------------------------------
发展历史
在Basic语言演变成QBasic,然后到Visual Basic之前,VarPtr函数就已经存在了。开始,这个函数存在于VB运行库1.0版中。通过声明可以调用这个函数:
Declare Function VarPtr Lib "vbrun100.dll" (Var As Any) As Long
数年之后,vbrun100.dll变成了msvbvm50.dll,但该函数的入口点却还在那儿。为了获取变量的地址,只须将变量名传递给该函数就行了。例如:
Dim l As Long
Debug.Print VarPtr(l)
类似地,为了获取字符串的指针,而非保存字符串的变量的指针,只须在变量名前加上ByVal即可。如:
Debug.Print VarPtr(s),VarPtr(ByVal s)
在VB3之前,用这种方法来获取字符串缓冲的指针是非常普遍的。但在VB4却遇到了一点麻烦。
ANSI/UNIDCODE问题
随着32位世界和VB4的到来,我们迈进了一半是UNICODE,一半是ANSI的Windows世界。而在此之前,是ANSI一统天下。在VB中,所有字符串按UNICODE保存,但所有的API调用却仍使用ANSI字符串。这就要求在调用API函数之前,将字符串从UNICODE转换成ANSI,函数执行结束后,将返回的字符串从ANSI转换成UNICODE。虽然大多数时候这种转换对用户来说是透明的,但这就使利我们不能将一个字符串类型的参数以UNICODE方式从VB传递给DLL。类似地,任何包含有字符串的结构在执行API调用时,也必须经过这种双重转换。
这种差异是如何影响VarPtr函数的呢?当一个字符串传递给VarPtr函数时,函数执行后所返回的地址是保存临时ANSI字符串的临时ANSI字符串或变量的地址。换句话说,这个地址并不是你声明的变量的真正地址。因此,对于字符串变量以及包括字符串的结构来讲,这个函数一点用也没有。
VB5来解决问题
为了能VarPtr能重新发挥作用,VB5(及Office97)加入了三个针对VBA类型库的入口点。这些入口点为VarPtr函数提供了内置的声明。这三个函数的作用是:
VarPtr:返回变量地址
StrPtr:返回真正的UNICODE字符串缓冲区的地址
ObjPtr:返回任何对象变量引用的地址
下面是这三个函数的具体用法。
StrPtr
该函数主要用来产生高效的UNICODE API调用。在VB4,UNICODE形式的API函数的调用必须借助于Byte数组,例如:
Declare Sub MyUnicodeCall Lib "MyUnicodeDll.dll" (pStr as Byte)
Sub MakeCall (MyStr as String)
Dim bTmp() as Byte
bTmp=MyStr & vbNullChar
MyUnicodeCall bTmp(0)
MyStr=bTmp
MyStr=left(MyStr, Len(MyStr)-1)
End Sub
如果使用StrPtr,上面的代码精简为:
Declare Sub MyUnicodeCall Lib "MyUnicodeDll.dll" (pStr as Byte)
Sub MakeCall (MyStr as String)
MyUnicodeCall StrPtr(MyStr)
End Sub
VarPtr/StrPtr/Ob
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的十字绣绣图丢了。现在急需要绣图。
min指的是分还是秒?
劫后重生的感悟古诗词,涅槃重生是什么意思
萨摩耶哪有卖
娄星区娄底娄星区志成健康用品我想知道这个在
宝时捷有什么好看车型?
梦见自己打自己耳光是怎么回事啊?而且还打醒
我们不允许在这儿抽烟.这句话可否翻译为We do
过敏是什么症状,美丽有术:戴耳钉过敏怎么办
冲了QQ会员在cf里会有什么好处吗?是不用钱的
四个月前因为头受到猛烈撞击到现在还有个头刨
手机天语A615怎样将手机QQ缩小到后盘操作?
给闺蜜的生日祝福简短,谁那里有描写闺蜜之间
伍家岗区宜昌泰江诊所这个地址怎么能查询到,
IT和CEO有和区别,
推荐资讯
Sir Winston Churchill
人穷志不穷的故事 (采用送加50分)快!
我的PIN锁了但是PUK码又不知道请问怎样才能打
米饭胖人吗,多吃米饭会长胖吗?
跟富士康签约了如果不去怎么办
C语言,不知道怎么编写程序.各位大神谢谢了~~~
为什么我拍的图不见了
谁有旋舞辣白菜或者网瘾的呢?给我个吧,咱的
二代身份证刷卡上网对身份证有影响吗
AVA会员加成经验和经验卡加成效果是否叠加?
怎样让很瘦的人变胖
笔记本怎样安装网卡,联想笔记本网卡驱动怎么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?