vb6.0中如何设置文本框居中对齐 vb比较两个数大小?

[更新]
·
·
分类:互联网
1564 阅读

vb6.0中如何设置文本框居中对齐

vb比较两个数大小?

vb比较两个数大小?

我来回答题主的疑惑吧,其实是栈上数据互相覆盖导致的。
首先VB6里Integer类型的长度是2字节,但你CopyMemory复制的是4字节,所以,后一条CopyMemory会写越界。
那么再看越界行为,我个人分析,栈的内存分布是这样的:
在代码一里,你的第二句CopyMemory会复制4字节到NumPoints的地址上,但这个变量只有2个字节,于是就把后面的Num给覆盖了。我猜测pByte 148~152的内容应该也是00结尾的,所以最终输出的Num值就是0
反过来的代码二就没有问题,但是反过来的话你的第二句CopyMemory会覆盖到别的东西,具体是什么就要看你代码怎么写的了。而代码二里第一句实际上也覆盖了一次Num的值,不信你可以先给Num一个初始值,再在代码二CopyMemory(NumPoints1, pByte(148), 4)之后打印一下Num值,肯定是0
如果你学一下C语言这种问题就很容易发现了。
对于VB来说,CopyMemory比较危险,最可靠的做法是用len来确定要复制的内存大小,比如
这样就可靠多了。
-------------------------------------昨天填了这个坑以后觉得好像不太对-------------------------------------
于是反汇编了一下VB生成EXE文件:
不对啊,虽然integer是2字节,但VB编译的时候是4字节对齐的。
再看运行结果:
结果居然不一样!
然后我就挨个编译选项试了一下,发现除了生成P代码以外,其余的生成的本地代码运行结果都是1,反汇编也证明虽然integer的大小是2字节,但生成汇编都是以4字节对齐的。我猜题主肯定没试过生成EXE,因为EXE的结果跟VB里是不一样的。那么为什么P代码以及VB里运行时结果是不同的,只能通过反汇编P代码试试了。P代码是一种解释型的语言,大部分实际代码都跑在VB的DLL里,但通过反汇编还是可以定位到CopyMemory的位置。通过适当修改代码,这样就可以更清楚的定位,可以发现在P代码模式里,两个integer确实是挨着的,没有按4字节对齐:总结:1. 题主这种情况肯定是不正确的,但如果生成EXE也可能会有正确的值;2. VB里和P代码模式下VB采用解释运行的方法,与直接生成本地代码结果不同;3. 不同模型下栈上数据的对齐方式不同。-完-

vb无法合并单元格?

选中需要合并的两个或者两个以上单元格,右击,设置单元格格式,对齐里,勾合并单元格