VB字符串与api函数CopyMemory copymemory ByVal StrPtr(b$),ByVal StrPtr(a$),4 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该不会是VB中加了Lenb(a)的,你把参数三改为2,就会出现“非法操作”(98下),具体的我也不太清楚(对CopyMemory不是很熟悉),你去问问Acptvb吧! 原因:String变量的地址并不是字符串的地址 byval不用写吧.因为我的宣告Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _(Destination As Any, Source As Any, ByVal Length As Long)也是byval啊.string不是字符串的地址是不是说上面a$的地址200700?acptvb又是谁啊,我不知道啊.怎么找? String变量的地址并不是字符串的地址 ?------- 那是 谁的地址? 补充:VB字符串严格来讲称作BSTR,实际上是一个指针,它存放的内容是指向字符数组开始的地址,用Varptr得到的是这个指针的地址,用Strptr得到的才是这个指针的内容,即字符数组的地址。另外,字符数组前面还有两个字节用来存放字符串的长度。实际上VB的字符串非常的复杂,特别是当它和API函数交互作用的时候。建议最好找本书来看。 呀, 晕 ...... ^-^大家还是先分清什么是 字符串,什么是 字符串数组 .什么情况下才有 SAFYARRAY 结构 . 又打错了. 是 SAFEARRAY 结构. To: sonicdater(告别CSDN,开门练功中……) 大家还是先分清什么是 字符串,什么是 字符串数组 .'我说的不是字符串数组,而是字符数组,在VB中,实际上是由指针和字符数组构成了字符串。 hillmanweb(山人) 讲的是对的,就是VB中的字符串是一个BSTR结构的,它是一个指针,指向一个包含实际字符串内容以及长度的内存。在上面你的代码中,实际上还是指针的拷贝,并没有赋值整个字符串,至于为什么出现a$="no good"后仍然b$得到正确的结果,是因为VB会重新为a$分配内存地址,参考下面的代码: Dim a$ a$ = "abcd" Debug.Print StrPtr(a$) a$ = "abcd" Debug.Print StrPtr(a$)可以发现每次得到的结果不一样,这就是因为VB自动为新的字符串赋值而给a$分配了新的内存空间。那么在上面的问题中,CopyMemory是将a$的地址赋予b$,然后重新给a$赋值后b$仍然指向原来a$指向的内存空间,所以可以得到a$原来的结果。 由于VB隐藏了很多细节,所以只能给你一些我的大概理解,现在正在翻一本很久以前买的 Visual Basic 5.0 核心技术,希望能找到更准确的答案。 string应该是一个类似CString *的东西吧。 TechnoFantasy(www.applevb.com) 我想你是对的,谢了。 求教 API MCIstring 播放AVI时,如何设置视屏播放是窗口大小,或者称为分辨率? VB+sql2000单机版人事管理系统怎么改成网络版啊??100分求解! 请问怎么用dom,简单的读出下面这段xml文档里的数据呢? vb如何从SQL中提取图片并显示 RichTextBox问题 最最菜的问题!vb中的幂函数是哪个? 急求帮助,如何通过程序实现对word文档的排版. Combox控件能否多选? 检查SQL语句 急急急急急急急急!!!!! 排序问题 请问,如何才能将一个很大(多媒体)的文件上传到服务器上?如果我将这个一功能做成一个active.oxc控件然后放在网页上,可否正常使用呢?
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
也是byval啊.string不是字符串的地址是不是说上面a$的地址200700?acptvb又是谁啊,我不知道啊.怎么找?
------- 那是 谁的地址?
另外,字符数组前面还有两个字节用来存放字符串的长度。
实际上VB的字符串非常的复杂,特别是当它和API函数交互作用的时候。建议最好找本书来看。
大家还是先分清什么是 字符串,什么是 字符串数组 .'我说的不是字符串数组,而是字符数组,在VB中,实际上是由指针和字符数组构成了字符串。
讲的是对的,就是VB中的字符串是一个BSTR结构的,它是一个指针,指向一个包含实际字符串内容以及长度的内存。
在上面你的代码中,实际上还是指针的拷贝,并没有赋值整个字符串,至于为什么出现
a$="no good"
后仍然b$得到正确的结果,是因为VB会重新为a$分配内存地址,参考下面的代码: Dim a$
a$ = "abcd"
Debug.Print StrPtr(a$)
a$ = "abcd"
Debug.Print StrPtr(a$)可以发现每次得到的结果不一样,这就是因为VB自动为新的字符串赋值而给a$分配了新的内存空间。
那么在上面的问题中,CopyMemory是将a$的地址赋予b$,然后重新给a$赋值后b$仍然指向原来a$指向的内存空间,所以可以得到a$原来的结果。
我想你是对的,谢了。