VB 调试之初识 VB
初识简单了解一下 VB,相信随着深入的学习,对它的了解会更多,理解会更深;
P-Code Packed Code 压缩代码
- 4.0 以前
- 运行时,动态链接库(DLL)将翻译或解释执行程序中的指令;
- 解释器 MSVBVM50.DLL 和 MSVBVM60.DLL
N-Code Native Code 本机代码
- 5.0 以后
- 改善 VB 的运行速度
- 但还是需要 MSVBVM60.DLL,因为许多函数本体放在 MSVBVM60.DLL 里面,需要不断地 CALL 其中的函数,不过,这时候的 MSVBVM60.DLL 就不承担解释执行的任务了,只是充当一般的 DLL;
编译器技术
- 编译器的编译技术可以分为 native-compile(自然编译)与 pcode-compile(伪编译)两种;
- 自然编译是编译器将高级语言转换为汇编代码,并经链接生成 EXE 程序的过程;
- 伪编译是编译器将高级语言转换为某种编码后,将能解释、执行此编码的一段程序一同链接,生成 EXE 程序;
- 伪代码 p-code,最早应该叫做 Pascal-Code,其名称起源于一个 pascal 编译器使用的“中间代码”编译技术。现在一般作为 pseudo-code(伪代码),或 packed-code(压缩代码)简称,此项编译技术的出现,最终导致了“虚拟机”的出现。而微软在其编程工具 basic、c、vb 中都使用了类似的编译技术;
- 所谓伪代码,其基本工作原理是编译器先把执行程序编译为比 80X86 机器码紧凑得多的中间代码形式,然后在链接时把一个小工作引擎嵌入执行程序中,最后在运行时由此工作引擎把 P-Code 解释为本地机器码实际执行,所以叫做 packed-code;同时又由于此代码并不是最终的机器码形式,实际上是“变形的源代码”,所以也被称为 pseudo-code。依靠 P-code 编译技术,使得编程语言不依赖于机器或操作平台成为可能;
VB 的主要数据类型
| 在函数中的缩写形式 | 数据类型 |
|---|---|
| bool | 布尔型 |
| str | 字符串型 |
| i2 | 双字节整型 |
| ui2 | 无符号双字节整型 |
| i4 | 长整型 |
| r4 | 单精度浮点型 |
| r8 | 双精度浮点型 |
| cy | 货币型 |
| var | 变体类型 |
| fp | 浮点型 |
| cmp | 比较 |
| comp | 比较 |
VB 常用 API 函数
数据类型转换类函数:
| API 函数 | 含义 |
|---|---|
| __vbaI2Str | 将一个字符串转化为整型 |
| __vbaI4Str | 将一个字符串转化为长整型 |
| __vbar4Str | 将一个字符串转化为单精度浮点型 |
| __vbar8Str | 将一个字符串转化为双精度浮点型 |
| VarCyFromStr | 将字符串转化为货币类型 |
| VarBstrFromI2 | 将整型数据转化为字符串 |
数据移动:
| API 函数 | 含义 |
|---|---|
| __vbaStrCopy | 将一个字符串拷贝至指定内存单元中 |
| __vbaStrMove | 将一个字符串移动到指定内存单元中 |
| __vbaVarCopy | 将一个变量的值拷贝至指定内存单元中 |
| __vbaVarMove | 将一个变量的值移动到指定内存单元中 |
数学运算:
| API 函数 | 含义 |
|---|---|
| __vbavaradd | 两个变量值相加 |
| __vbavarsub | 第一个变量减去第二个变量 |
| __vbavarmul | 两个变量值相乘 |
| __vbavaridiv | 第一个变量除以第二个变量,得到一个整数商 |
| __vbavarxor | 两个变量值做异或 |
| __vbavardiv | 除 |
| __vbavarmod | 求余 |
| __vbavarneg | 取负 |
| __vbavarpow | 指数 |
程序设计杂项:
| API 函数 | 含义 |
|---|---|
| __vbavarfornext | 这是 VB 程序里的循环结构,For…Next…(Loop) |
| __vbafreestr | 释放掉指定字符串所占的内存,也就是把指定内存单元中字符串抹掉 |
| __vbafreeobj | 释放 VB 的一个对象(一个窗口或者一个对话框)所占的内存,也就是把指定内存中窗口或者对话框对象抹掉 |
| __vbastrvarval | 获取字符串指定的子串 |
| multibytetowidechar | 将多字节字符串转化为宽字节字符串 |
| rtcMsgBox | 弹出一个消息框,类似于 WINDOWS API 中的 MessageBoxA/MessageBoxExA 函数 |
| __vbavarcat | 将两个变量值相连,如果是两个字符串,就直接连接在一起 |
| __vbafreevar | 释放变量所占的内存空间,也就是把指定内存中的变量值抹掉 |
| __vbaobjset | 给对象赋值或者实例化 |
| __vbaLenBstr | 获取一个字符串的长度,注意:VB 中一个汉字的长度也是 1 个字节 |
| rtcInputBox | 显示一个 VB 标准的输入窗口,类似于 WINDOWS API 函数 GetWindowTextA/GetDlgItemTextA |
| __vbaNew | 显示一个对话框,类似于 WINDOWS API 函数 DialogBox |
| __vbaNew2 | 显示一个对话框,类似于 WINDOWS API 函数 DialogBoxParamA |
| rtcTrimBstr | 将字符串左右两边的空格去掉 |
| __vbaEnd | 结束进程 |
| __vbaLenVar | 获取一个变量的大小 |
| rtcMidCharVar | 从字符串中间获取相应的字符,VB 中的 MID 函数,用法 MID(“字符串”,“开始的位置”,“取几个字符”) |
| rtcLeftCharVar | 从字符串左边取相应字符,VB 中的用法:Left(“字符串”,”从左边开始取几个字符”) |
| rtcRightCharVar | 从字符串右边取相应字符,VB 中的用法:Right(“字符串”,”从右边开始取几个字符”) |
| rtcDir | 获取当前路径 |
| __vbaFileOpen | 打开文件 |
比较函数:
| API 函数 | 含义 |
|---|---|
| __vbastrcomp | 比较两个字符串,类似于 WINDOWS API 函数 lstrcmp |
| __vbastrcmp | 比较两个字符串,类似于 WINDOWS API 函数 lstrcmp |
| __vbaFpCmpCy | 浮点变量值与货币变量值进行比较 |
| __vbavartsteq | 比较两个变量值是否相等 |
| __vbavartstNe | 判断两个变量值是否不相等 |
| __vbavartstGe | 大于等于 |
| __vbavartstGt | 大于 |
| __vbavartstLe | 小于等于 |
| __vbavartstLt | 小于 |