Vba 如果未将CopyMemory放入函数中,则会导致Excel崩溃

Vba 如果未将CopyMemory放入函数中,则会导致Excel崩溃,vba,copymemory,Vba,Copymemory,我在试验CopyMemory时遇到了一个奇怪的问题。我有一段复制自的代码,只有将其放入函数中才能工作: 我在开头说: Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long) 工作版本: 次弦试验 将str1设置为字符串 变暗pstr1为长PTR str1=PowerVB 调试。打印内存:0x;Mem_Read

我在试验CopyMemory时遇到了一个奇怪的问题。我有一段复制自的代码,只有将其放入函数中才能工作:

我在开头说:

Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)
工作版本:

次弦试验 将str1设置为字符串 变暗pstr1为长PTR str1=PowerVB 调试。打印内存:0x;Mem_ReadHexpstr1-4,LenBstr1+6 端接头 公共函数Mem_ReadHexByVal Ptr为LongPtr,ByVal长度为String Dim bBuffer作为字节,strBytes作为字符串,i作为长,ub作为长,b作为字节 ub=长度-1 雷迪姆·布弗鲁布 雷迪姆标准红细胞 CopyMemory bBuffer0,ByVal Ptr,长度 对于i=0到ub b=bBufferi strBytesi=IIfb<16,0和十六进制$b 下一个 Mem_ReadHex=联合红细胞, 端函数 此程序完美地打印出内存中字符串的整个布局。前4个字节表示长度,后接字符串内容,然后是2个字节的null:

Memory  : 0x0E00000050006F00770065007200560042000000
现在,如果我将函数放入sub,它将崩溃:

次弦试验 将str1设置为字符串 将str2设置为字符串 变暗pstr1为长PTR str1=PowerVB CopyMemory pstr1,ByVal VarPtrstr1,8 Dim bBuffer作为字节,strBytes作为字符串 ub=LenBstr1+5 雷迪姆·布弗鲁布 雷迪姆标准红细胞 CopyMemory bBuffer0、ByVal pstr1-4、LenBstr1+6'额外4个字节的字符串长度和2个字节的空字符 对于i=0到ub b=bBufferi strBytesi=IIfb<16,0,&Hex$b'表示两个字节,如果值<16,则它只包含一个字节 接下来我 调试。打印JoinstrBytes, 端接头 我不明白。两个版本之间有什么区别?

好的,我找到了修复程序:

CopyMemory bBuffer(0), ByVal pstr1 - 4, ub + 1
因为CopyMemory必须与第三个参数一样长,所以我不能使用LenBstr1+6,因为它可能是一个整数