ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 大灰狼1976

[分享] 【CopyMemory】截取数组的一部分赋值给另一个数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-14 09:29 | 显示全部楼层
看来是版本不同的原因或者64位32位的问题,我这里240字节取得15个数据。或者可能据大。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-14 10:31 来自手机 | 显示全部楼层
我家里也是32位office2010,用24字节结果完全正确

TA的精华主题

TA的得分主题

发表于 2024-8-14 20:57 | 显示全部楼层
大灰狼1976 发表于 2024-8-14 10:31
我家里也是32位office2010,用24字节结果完全正确

应该是有问题的,你打个断点试试,如果32位下用24个字节,循环第一次的时候,第二列就有数据了,第二次循环的时候只是覆盖了原先的数据,所以会有超出brr数组内存地址被赋值(这一段数据是不可控的),仅供参考:

对应的内存结构(32位的)如下:


image.jpg
对应的brr数组的值:
image.png


评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-14 21:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
variant类型32位下是16字节,64位下是24字节。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-14 21:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wodewan 发表于 2024-8-14 20:57
应该是有问题的,你打个断点试试,如果32位下用24个字节,循环第一次的时候,第二列就有数据了,第二次循 ...

看来16位和24位都是对的,我相信1楼和10楼的验证,也相信你的验证。只是引起不同的原因未找到。我的VBA7.0

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-14 21:28 | 显示全部楼层
感谢几位大师求证,确实是第二次被覆盖了,variant类型32位下是16字节,64位下是24字节明白了,受教!

TA的精华主题

TA的得分主题

发表于 2024-8-15 07:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
大灰狼1976 发表于 2024-8-14 21:28
感谢几位大师求证,确实是第二次被覆盖了,variant类型32位下是16字节,64位下是24字节明白了,受教!

如果是这样的话,最好能根据32位或64位自动按16和24计算

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-15 08:44 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ykcbf1100 发表于 2024-8-15 07:47
如果是这样的话,最好能根据32位或64位自动按16和24计算

是的,如果要做成应用的话就要考虑易用性,我现在是提出一种方法,所以就不考虑这么多啦

TA的精华主题

TA的得分主题

发表于 2024-8-15 08:53 | 显示全部楼层
大灰狼1976 发表于 2024-8-15 08:44
是的,如果要做成应用的话就要考虑易用性,我现在是提出一种方法,所以就不考虑这么多啦

嗯,也是。

TA的精华主题

TA的得分主题

发表于 2024-8-15 09:34 | 显示全部楼层
大灰狼1976 发表于 2024-8-15 08:44
是的,如果要做成应用的话就要考虑易用性,我现在是提出一种方法,所以就不考虑这么多啦

加段32位和64位判断代码,应该可以自适应32位和64位系统。

64位测试通过。32位未测试。
你看可以吗?

CopyMemory截取数组一部分赋值给另一个数组.zip

17.28 KB, 下载次数: 10

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:42 , Processed in 0.032548 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表