首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

100分,哪位高手能解释一下CopyMemory是如何识别字节数组指针的

2013-04-09 
100分,谁能解释一下CopyMemory是怎么识别字节数组指针的?本帖最后由 liucqa 于 2013-04-08 01:42:54 编辑

100分,谁能解释一下CopyMemory是怎么识别字节数组指针的?
本帖最后由 liucqa 于 2013-04-08 01:42:54 编辑 我在Excel 2007 VBA里面写如下代码:

Sub TestBSTRRef()
'替换BSTR变量指向字符串的指针,从而修改BSTR变量所指的字符串
    Dim b(13) As Byte, vpstr As Long, vpbyte As Long, spstr As Long, str$
    b(0) = 8
    b(1) = 0
    b(2) = 0
    b(3) = 0
    b(4) = 66
    b(5) = 0
    b(6) = 66
    b(7) = 0
    b(8) = 65
    b(9) = 0
    b(10) = 65
    b(11) = 0
    b(12) = 0
    b(13) = 0
    str = "MNP"

    CopyMemory ByVal VarPtr(str),VarPtr(b(4)), 4              '把b(4)的地址,拷贝到BSTR变量里面,当作新的指针
    MsgBox "长度是:" & Len(str) & vbCrLf & "字符串是" & str    '输出长度4,字符串BBAA
End Sub



CopyMemory ByVal VarPtr(str),  VarPtr(b(4)) , 4   
这个语句可以显示正确的字符串内容,但有时会导致Excel死机(有的时候没事?)


谁知道CopyMemory是怎么识别字节数组指针的?
如何传递参数才能把一个字节数组模拟的BSTR字符串传递给BSTR变量呢?确保不死机
死机原因与Str变量中的字符串被无故抛弃是否有关?


谢谢! BSTR copymemory? vb指针?字节数组 vb指针 字节数组
[解决办法]
参考一下这个
[解决办法]
你最大的问题是破坏了内存管理。
原先指向字符串 "MNP" 的指针丢了,该内存无法释放。
而 b(0)~b(13) 这段内存即属于数组又属于字符串,会释放两次。
这样的隐患引起崩溃不稀奇。

这种玩弄内存的操作最后应该恢复原状。
[解决办法]
再来回答楼主题目中的问题。
CopyMemory ByVal VarPtr(str),VarPtr(b(4)), 4

等效于
Dim _Temp As Long
_Temp = VarPtr(b(4))
CopyMemory ByVal VarPtr(str),_Temp, 4

VarPtr(b(4)) 返回一个地址值,该值存放在一个临时变量中;
然后该变量又以 ByRef 的方式作为 CopyMemory 的参数,就是复制该变量的值——等于复制了地址值。

热点排行