MyException - 我的异常网
当前位置:我的异常网» VB » 求高效率的取高字节VB6的函数

求高效率的取高字节VB6的函数

www.myexceptions.net  网友分享于:2013-04-10  浏览:25次
求高效的取高字节VB6的函数
如题,不要使用copymemory函数,效率低。


------解决方案--------------------
我有俩问题:
1、获取什么变量的高字节?
2、API函数的效率都低,那还有什么更高?
------解决方案--------------------
引用:
谢谢 c631106233

请问和下面函数比,谁效率稍高?

Public Function GetHiWord(ByRef lThis As Long) As Integer
If (lThis And &H80000000) = &H80000000 Then
GetHiWord = ((lThis And &H7FFF0000)……

速度不知道,因为我没怎么用过,只是一个比较普通的用法,不过你的应该比我的快,byref应该是比byval快的
就算几千万的计算应该也只差1,2秒,这个对我来说没什么用,没地方用

引用:
我上面函数和直接调用copymemory  比,大约快80%

copymemory 应该没那么慢的,具体看你的代码是怎么写的?
------解决方案--------------------
取高字节,符号想怎么处理?
------解决方案--------------------
最快就是不经过运算,直接取每个字节的内容,就是C里面的联合体union.

VB里不支持联合体,所以想要使用这个功能得绕点弯,操作SafeArray来实现,但最终效果是一样的.

Option Explicit
'仿C语言中的联合体union高效取高低字方法
'
'实现思路:
'通过操作SafeArray来使一个数组的pvData指向目标变量,然后直接访问高低字,就像C里面的union一样
'
'By 嗷嗷叫的老马
'http://www.m5home.com/

Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
     ByRef Destination As Any, _
     ByRef Source As Any, _
     ByVal Length As Long)

Dim myIntegerArr() As Integer, myLong As Long
Dim ppSA As Long, pSA As Long, pvDataOld As Long

Private Sub Command1_Click()
    myLong = &HAABBCCDD     '赋值.此变量已与数组"绑定"了.
    
    MsgBox Hex(myIntegerArr(0)) & vbCrLf & Hex(myIntegerArr(1))     '直接取得高低字
End Sub

Private Sub Form_Load()
    Call initArray
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call FreeArray
End Sub

Private Sub initArray()
    '初始化数组及指针.
    '
    '将SafeArray结构的pvDara指针改为myLong变量的地址,这样就可以直接访问高低字了.
    '
    '简单来说就是"绑定"数组与myLong变量,让它们实际上使用同一个地址,相当于C里面的union
    '
    ReDim myIntegerArr(1)                           '与要访问的变量的长度相同.这里是要把Long分成两个Integer来访问,那就是0,1两个成员.
    myLong = VarPtr(myLong)                         '把自己的地址放在自己里面
    
    ppSA = VarPtrArray(myIntegerArr)                '得到指向SafeArray结构指针的指针(有点绕,就是指针的指针...- -!!)
    Call CopyMemory(pSA, ByVal ppSA, 4)             '得到SafeArray指针

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有