VB的SizeOfCode 有一点点的Bug

VBA,VB 6.0计算数据类型占用内存大小 需求背景  C、C++和.net语言都提供了计算机变量内存大小的函数即SizeOf,该函数能正确返回数据类型占用的内存字节数,但是VBA、VB6.0没有直接提供。特别在调用Windows API的时候,该功能显示得特别重要。 实现思路  VBA、VB6.0虽然没有提供指针运算符,但提供了几个获取变量指针(内存地址)的值的函数。 public function VarPtr(ptr as Any) as longPtr '获取变量自身的内存地址 public function StrPtr(ptr as A 阅读详情
Option Explicit

Dim initFlag As Long
Public opflag(0 To 255) As Byte, opexflag(0 To 255) As Byte

Private Function flagInitialize() As Long
    opflag(0) = 1: opflag(1) = 1
    opflag(2) = 1: opflag(3) = 1
    opflag(4) = 2: opflag(5) = 16
    opflag(6) = 0: opflag(7) = 0
    opflag(8) = 1: opflag(9) = 1
    opflag(10) = 1: opflag(11) = 1
    opflag(12) = 2: opflag(13) = 16
    opflag(14) = 0: opflag(15) = 0
    opflag(16) = 1: opflag(17) = 1
    opflag(18) = 1: opflag(19) = 1
    opflag(20) = 2: opflag(21) = 16
    opflag(22) = 0: opflag(23) = 0
    opflag(24) = 1: opflag(25) = 1
    opflag(26) = 1: opflag(27) = 1
    opflag(28) = 2: opflag(29) = 16
    opflag(30) = 0: opflag(31) = 0
    opflag(32) = 1: opflag(33) = 1
    opflag(34) = 1: opflag(35) = 1
    opflag(36) = 2: opflag(37) = 16
    opflag(38) = 0: opflag(39) = 0
    opflag(40) = 1: opflag(41) = 1
    opflag(42) = 1: opflag(43) = 1
    opflag(44) = 2: opflag(45) = 16
    opflag(46) = 0: opflag(47) = 0
    opflag(48) = 1: opflag(49) = 1
    opflag(50) = 1: opflag(51) = 1
    opflag(52) = 2: opflag(53) = 16
    opflag(54) = 0: opflag(55) = 0
    opflag(56) = 1: opflag(57) = 1
    opflag(58) = 1: opflag(59) = 1
    opflag(60) = 2: opflag(61) = 16
    opflag(62) = 0: opflag(63) = 0
    opflag(64) = 0: opflag(65) = 0
    opflag(66) = 0: opflag(67) = 0
    opflag(68) = 0: opflag(69) = 0
    opflag(70) = 0: opflag(71) = 0
    opflag(72) = 0: opflag(73) = 0
    opflag(74) = 0: opflag(75) = 0
    opflag(76) = 0: opflag(77) = 0
    opflag(78) = 0: opflag(79) = 0
    opflag(80) = 0: opflag(81) = 0
    opflag(82) = 0: opflag(83) = 0
    opflag(84) = 0: opflag(85) = 0
    opflag(86) = 0: opflag(87) = 0
    opflag(88) = 0: opflag(89) = 0
    opflag(90) = 0: opflag(91) = 0
    opflag(92) = 0: opflag(93) = 0
    opflag(94) = 0: opflag(95) = 0
    opflag(96) = 0: opflag(97) = 0
    opflag(98) = 1: opflag(99) = 1
    opflag(100) = 0: opflag(101) = 0
    opflag(102) = 0: opflag(103) = 0
    opflag(104) = 16: opflag(105) = 17
    opflag(106) = 2: opflag(107) = 3
    opflag(108) = 0: opflag(109) = 0
    opflag(110) = 0: opflag(111) = 0
    opflag(112) = 2: opflag(113) = 2
    opflag(114) = 2: opflag(115) = 2
    opflag(116) = 2: opflag(117) = 2
    opflag(118) = 2: opflag(119) = 2
    opflag(120) = 2: opflag(121) = 2
    opflag(122) = 2: opflag(123) = 2
    opflag(124) = 2: opflag(125) = 2
    opflag(126) = 2: opflag(127) = 2
    opflag(128) = 3: opflag(129) = 17
    opflag(130) = 3: opflag(131) = 3
    opflag(132) = 1: opflag(133) = 1
    opflag(134) = 1: opflag(135) = 1
    opflag(136) = 1: opflag(137) = 1
    opflag(138) = 1: opflag(139) = 1
    opflag(140) = 1: opflag(141) = 1
    opflag(142) = 1: opflag(143) = 1
    opflag(144) = 0: opflag(145) = 0
    opflag(146) = 0: opflag(147) = 0
    opflag(148) = 0: opflag(149) = 0
    opflag(150) = 0: opflag(151) = 0
    opflag(152) = 0: opflag(153) = 0
    opflag(154) = 12: opflag(155) = 0
    opflag(156) = 0: opflag(157) = 0
    opflag(158) = 0: opflag(159) = 0
    opflag(160) = 16: opflag(161) = 16
    opflag(162) = 16: opflag(163) = 16
    opflag(164) = 0: opflag(165) = 0
    opflag(166) = 0: opflag(167) = 0
    opflag(168) = 2: opflag(169) = 16
    opflag(170) = 0: opflag(171) = 0
    opflag(172) = 0: opflag(173) = 0
    opflag(174) = 0: opflag(175) = 0
    opflag(176) = 2: opflag(177) = 2
    opflag(178) = 2: opflag(179) = 2
    opflag(180) = 2: opflag(181) = 2
    opflag(182) = 2: opflag(183) = 2
    opflag(184) = 16: opflag(185) = 16
    opflag(186) = 16: opflag(187) = 16
    opflag(188) = 16: opflag(189) = 16
    opflag(190) = 16: opflag(191) = 16
    opflag(192) = 3: opflag(193) = 3
    opflag(194) = 4: opflag(195) = 0
    opflag(196) = 1: opflag(197) = 1
    opflag(198) = 3: opflag(199) = 17
    opflag(200) = 6: opflag(201) = 0
    opflag(202) = 4: opflag(203) = 0
    opflag(204) = 0: opflag(205) = 2
    opflag(206) = 0: opflag(207) = 0
    opflag(208) = 1: opflag(209) = 1
    opflag(210) = 1: opflag(211) = 1
    opflag(212) = 2: opflag(213) = 2
    opflag(214) = 0: opflag(215) = 0
    opflag(216) = 32: opflag(217) = 32
    opflag(218) = 32: opflag(219) = 32
    opflag(220) = 32: opflag(221) = 32
    opflag(222) = 32: opflag(223) = 32
    opflag(224) = 2: opflag(225) = 2
    opflag(226) = 2: opflag(227) = 2
    opflag(228) = 2: opflag(229) = 2
    opflag(230) = 2: opflag(231) = 2
    opflag(232) = 80: opflag(233) = 80
    opflag(234) = 12: opflag(235) = 2
    opflag(236) = 0: opflag(237) = 0
    opflag(238) = 0: opflag(239) = 0
    opflag(240) = 0: opflag(241) = 0
    opflag(242) = 0: opflag(243) = 0
    opflag(244) = 0: opflag(245) = 0
    opflag(246) = 1: opflag(247) = 1
    opflag(248) = 0: opflag(249) = 0
    opflag(250) = 0: opflag(251) = 0
    opflag(252) = 0: opflag(253) = 0
    opflag(254) = 1: opflag(255) = 65
    opexflag(0) = 1: opexflag(1) = 1
    opexflag(2) = 1: opexflag(3) = 1
    opexflag(4) = 0: opexflag(5) = 0
    opexflag(6) = 0: opexflag(7) = 0
    opexflag(8) = 0: opexflag(9) = 0
    opexflag(10) = 0: opexflag(11) = 0
    opexflag(12) = 0: opexflag(13) = 0
    opexflag(14) = 0: opexflag(15) = 0
    opexflag(16) = 0: opexflag(17) = 0
    opexflag(18) = 0: opexflag(19) = 0
    opexflag(20) = 0: opexflag(21) = 0
    opexflag(22) = 0: opexflag(23) = 0
    opexflag(24) = 0: opexflag(25) = 0
    opexflag(26) = 0: opexflag(27) = 0
    opexflag(28) = 0: opexflag(29) = 0
    opexflag(30) = 0: opexflag(31) = 0
    opexflag(32) = 1: opexflag(33) = 1
    opexflag(34) = 1: opexflag(35) = 1
    opexflag(36) = 1: opexflag(37) = 0
    opexflag(38) = 1: opexflag(39) = 0
    opexflag(40) = 0: opexflag(41) = 0
    opexflag(42) = 0: opexflag(43) = 0
    opexflag(44) = 0: opexflag(45) = 0
    opexflag(46) = 0: opexflag(47) = 0
    opexflag(48) = 0: opexflag(49) = 0
    opexflag(50) = 0: opexflag(51) = 0
    opexflag(52) = 0: opexflag(53) = 0
    opexflag(54) = 0: opexflag(55) = 0
    opexflag(56) = 0: opexflag(57) = 0
    opexflag(58) = 0: opexflag(59) = 0
    opexflag(60) = 0: opexflag(61) = 0
    opexflag(62) = 0: opexflag(63) = 0
    opexflag(64) = 1: opexflag(65) = 1
    opexflag(66) = 1: opexflag(67) = 1
    opexflag(68) = 1: opexflag(69) = 1
    opexflag(70) = 1: opexflag(71) = 1
    opexflag(72) = 1: opexflag(73) = 1
    opexflag(74) = 1: opexflag(75) = 1
    opexflag(76) = 1: opexflag(77) = 1
    opexflag(78) = 1: opexflag(79) = 1
    opexflag(80) = 0: opexflag(81) = 0
    opexflag(82) = 0: opexflag(83) = 0
    opexflag(84) = 0: opexflag(85) = 0
    opexflag(86) = 0: opexflag(87) = 0
    opexflag(88) = 0: opexflag(89) = 0
    opexflag(90) = 0: opexflag(91) = 0
    opexflag(92) = 0: opexflag(93) = 0
    opexflag(94) = 0: opexflag(95) = 0
    opexflag(96) = 1: opexflag(97) = 1
    opexflag(98) = 1: opexflag(99) = 1
    opexflag(100) = 1: opexflag(101) = 1
    opexflag(102) = 1: opexflag(103) = 1
    opexflag(104) = 1: opexflag(105) = 1
    opexflag(106) = 1: opexflag(107) = 1
    opexflag(108) = 0: opexflag(109) = 0
    opexflag(110) = 1: opexflag(111) = 1
    opexflag(112) = 0: opexflag(113) = 3
    opexflag(114) = 3: opexflag(115) = 3
    opexflag(116) = 1: opexflag(117) = 1
    opexflag(118) = 1: opexflag(119) = 0
    opexflag(120) = 0: opexflag(121) = 0
    opexflag(122) = 0: opexflag(123) = 0
    opexflag(124) = 0: opexflag(125) = 0
    opexflag(126) = 1: opexflag(127) = 1
    opexflag(128) = 80: opexflag(129) = 80
    opexflag(130) = 80: opexflag(131) = 80
    opexflag(132) = 80: opexflag(133) = 80
    opexflag(134) = 80: opexflag(135) = 80
    opexflag(136) = 80: opexflag(137) = 80
    opexflag(138) = 80: opexflag(139) = 80
    opexflag(140) = 80: opexflag(141) = 80
    opexflag(142) = 80: opexflag(143) = 80
    opexflag(144) = 1: opexflag(145) = 1
    opexflag(146) = 1: opexflag(147) = 1
    opexflag(148) = 1: opexflag(149) = 1
    opexflag(150) = 1: opexflag(151) = 1
    opexflag(152) = 1: opexflag(153) = 1
    opexflag(154) = 1: opexflag(155) = 1
    opexflag(156) = 1: opexflag(157) = 1
    opexflag(158) = 1: opexflag(159) = 1
    opexflag(160) = 0: opexflag(161) = 0
    opexflag(162) = 0: opexflag(163) = 1
    opexflag(164) = 3: opexflag(165) = 1
    opexflag(166) = 0: opexflag(167) = 0
    opexflag(168) = 0: opexflag(169) = 0
    opexflag(170) = 0: opexflag(171) = 1
    opexflag(172) = 3: opexflag(173) = 1
    opexflag(174) = 0: opexflag(175) = 1
    opexflag(176) = 1: opexflag(177) = 1
    opexflag(178) = 1: opexflag(179) = 1
    opexflag(180) = 1: opexflag(181) = 1
    opexflag(182) = 1: opexflag(183) = 1
    opexflag(184) = 0: opexflag(185) = 0
    opexflag(186) = 1: opexflag(187) = 1
    opexflag(188) = 1: opexflag(189) = 1
    opexflag(190) = 1: opexflag(191) = 1
    opexflag(192) = 1: opexflag(193) = 1
    opexflag(194) = 0: opexflag(195) = 0
    opexflag(196) = 0: opexflag(197) = 0
    opexflag(198) = 0: opexflag(199) = 1
    opexflag(200) = 0: opexflag(201) = 0
    opexflag(202) = 0: opexflag(203) = 0
    opexflag(204) = 0: opexflag(205) = 0
    opexflag(206) = 0: opexflag(207) = 0
    opexflag(208) = 0: opexflag(209) = 1
    opexflag(210) = 1: opexflag(211) = 1
    opexflag(212) = 0: opexflag(213) = 1
    opexflag(214) = 0: opexflag(215) = 0
    opexflag(216) = 1: opexflag(217) = 1
    opexflag(218) = 0: opexflag(219) = 1
    opexflag(220) = 1: opexflag(221) = 1
    opexflag(222) = 0: opexflag(223) = 1
    opexflag(224) = 0: opexflag(225) = 1
    opexflag(226) = 1: opexflag(227) = 0
    opexflag(228) = 0: opexflag(229) = 1
    opexflag(230) = 0: opexflag(231) = 0
    opexflag(232) = 1: opexflag(233) = 1
    opexflag(234) = 0: opexflag(235) = 1
    opexflag(236) = 1: opexflag(237) = 1
    opexflag(238) = 0: opexflag(239) = 1
    opexflag(240) = 0: opexflag(241) = 1
    opexflag(242) = 1: opexflag(243) = 1
    opexflag(244) = 0: opexflag(245) = 1
    opexflag(246) = 0: opexflag(247) = 0
    opexflag(248) = 1: opexflag(249) = 1
    opexflag(250) = 1: opexflag(251) = 0
    opexflag(252) = 1: opexflag(253) = 1
    opexflag(254) = 1: opexflag(255) = 0
    
    flagInitialize = 1
End Function

Public Function SizeOfCode(dat() As Byte, ByRef pOpcode As Integer) As Long
    Dim p66 As Long, p67 As Long
    Dim sib As Long, m As Long, rm As Long, dispLen As Long
    Dim i As Long, f As Long, r As Long
    
    If initFlag = 0 Then initFlag = flagInitialize()
    Do
        Select Case dat(i)
            Case &H26, &H2E, &H36, &H3E, &H64, &H65, &HF0, &HF2, &HF3
            Case &H66
                p66 = True
            Case &H67
                p67 = True
            Case Else
                Exit Do
        End Select
        i = i + 1
        If i > 16 Then Exit Function
    Loop
    pOpcode = dat(i)
    If dat(i) = &HF Then
        i = i + 1
        pOpcode = &HF00 + dat(i)
        f = opexflag(dat(i))
    Else
        f = opflag(dat(i))
    End If
    i = i + 1
    If f And &H20 Then i = i + 1
    If f And 1 Then
        m = dat(i) And &HC0
        rm = dat(i) And 7
        i = i + 1
        sib = ((Not p67) And rm = 4)
        Select Case m
            Case 0
                If p67 And rm = 6 Then dispLen = 2
                If (Not p67) And rm = 5 Then dispLen = 4
            Case &H40
                dispLen = 1
            Case &H80
                If p67 Then dispLen = 2 Else dispLen = 4
            Case &HC0
                sib = 0
        End Select
        If sib Then
            If (dat(i) And 7 = 5) And (m = 0 Or m = 2) Then dispLen = 4
            i = i + 1
        End If
        i = i + dispLen
    End If
    If f And 2 Then i = i + 1
    If f And 4 Then i = i + 2
    If f And 8 Then i = i + 4
    If f And &H10 Then If p66 Then i = i + 2 Else i = i + 4
    SizeOfCode = i
End Function

Public Function SizeOfProc(dat() As Byte) As Long
    Dim l As Long, op As Integer, r As Long
    Dim b() As Byte, i As Long, n As Long
    
    b = dat
    Do
        l = SizeOfCode(b, op)
        r = r + l
        If l = 1 And op = &HC3 Then Exit Do
        If l = 3 And op = &HC2 Then Exit Do
        n = UBound(b)
        i = 0
        b = MidB(b, l + 1)
    Loop Until l = 0
    SizeOfProc = r
End Function


在VB6中使用指针:字节的计算 版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明作者:xixi出处:http://blog.youkuaiyun.com/slowgrace/archive/2009/04/26/4124347.aspx本文主要来自此帖的讨论,感谢unsigned、Soyokaze、Chen8013、Tiger_Zhao、m60a1、myjian、PctGL等朋友的指 阅读详情

相关推荐

获取本机网卡的物理地址程序(VB6.0源代码编写)' API函数声明

获取本机网卡的物理地址程序(VB6.0源代码编写)' API函数声明

sizeof()详解

sizeof的结果(以下结果都是在Linux v2.6 gcc v4获取)   sizeof操作符的结果类型是size_t     它在头文件中定义为: typedef unsigned int size_t;        该类型保证能容纳实现所建立的最大对象的字节大小.   1、ANSI C正式规定字符类型为1字节。         sizeof(char)

jacky的博客 9722

c++ size of code

c++ sizeof code. 关于c++笔试题中sizeof的例子

关于sizeof的几个问题

一.sizeof的特点(与strlen比较) 1.sizeof是运算符,strlen是函数,这意味着编译程序在编译的时候就把sizeof计算过了,所以sizeof(x)可以用来定义数组维数。 例如 int arr[sizeof(int)];//相当于int arr[4]; 2.sizeof能够返回变量或类型所占的字节空间大小,而strlen只能够返回字符串的大小,即字符串必须以'\

lionel的专栏 3156

零基础实战:YOLO检测头自定义替换全攻略

本文为零基础用户提供了YOLO检测头自定义替换的完整实战指南。通过将检测头比作汽车的“方向盘”,文章详细阐述了为何需要替换、如何寻找和集成新检测头模块、修改配置文件以及最终训练验证的全过程,旨在帮助用户针对特定任务(如小目标检测)提升模型性能。

perl8的博客 255

告别盲调!用Synopsys VIP搭建PCIe 5.0验证环境,手把手搞定链路训练与均衡调试

本文详细介绍了基于Synopsys VIP搭建PCIe 5.0验证环境的实战指南,重点解析了链路训练(LTSSM)与均衡调试的关键技术。通过配置VIP组件、设计验证平台架构及实战调试技巧,帮助工程师高效解决PCIe 5.0验证中的常见问题,提升芯片验证效率与可靠性。

weixin_28700411的博客 458

PE文件的分析和构造超详细过程

本文详细讲述如何从0构造一个PE文件,运行该文件会弹出一个HelloPE的窗口。

m0_62574258的博客 2473

【VMware篇】7-通过ISO镜像升级VMware Esxi

本文主要介绍Dell服务器上安装的ESXi升级的方法之一(采用ISO升级)。

chen_yunan的博客 5515

笔记:PE结构(3)可选头解析*

笔记:PE结构(3)可选头解析*

Q324411601的博客 338

PostgreSQL高可用之主备复制

多个PostgreSQL可协同工作,如果主库发生宕机备库将迅速进行接管并对外提供服务以实现高可用。本文将从主备复制、主备切换、故障转移等角度进行实际测试演练。第一章主备复制是基础,通过主备复制可以得到一个或多个相同的实例。在主备复制的基础上通过第二章主备切换介绍了如何手工将主库与备库互换角色。在第三章中,采用了Keepalived进行实时监测,在主库宕机后,使用主备切换中提到的命令使备库升级为主库并对外提供服务,以达到PostgreSQL高可用的目标。

asdasdsaff的博客 1348

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

帮助你解决在使用CMT2300A 时遇到的各种问题,若有需要,请及时与我交流

teleger的博客 1429
上一篇: 學校DrCom登錄腳本
下一篇: C DoEvents
vizee
博客等级 码龄16年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值