我对算法要求不高,主要是差不多了就行,也知道VB本身的原因很难达到一个高度。VB的数组其实就是SafeArray,而操作变量比操作数组快好几倍,由于VB不像C++那样可以用指针(VB也就模拟指针SafeArray),一个大的循环,尤其数据量大的(一般操作数组的元素都是几十万个,甚至上百万),就算只是(累加)或(异或)数组元素都需要不少时间,有些加密的东西为了解密时加载快,都只用了简单的加密方法(也正应了那句“鱼与熊掌不能兼得”,加密必然要付出时间的代价,不加密又很容易让别人看到明文)。 Private Declare Sub GetArrayPtr Lib "MSVBVM60.DLL" Alias "GetMem4" (ptr() As Any, retVal As Any) '对GetMem4的第一个参数改造成数组 Private Declare Sub GetMem4 Lib "MSVBVM60.DLL" (ptr As Any, retVal As Any) Dim lpSave As Long Dim dwSave() As Long ReDim dwSave(0) Call GetArrayPtr(dwSave, lpSave) '轻松得到dwSave数组的指针 '之前我发的帖子里没有调用GetMem4得到数组指针的,这个方法应该比你的MemCopy+VarPtr+VarPtrArray快不少,也显得简便
Private Declare Sub GetArrayPtr Lib "MSVBVM60.DLL" Alias "GetMem4" (ptr() As Any, retVal As Any) '对GetMem4的第一个参数改造成数组 Private Sub Form_Load() Dim ee() As Long Dim ptr As Long Call GetArrayPtr(ee, ptr) '也可以快速判断数组是否为空 If ptr = 0 Then Debug.Print "数组未初始化" ReDim ee(11) Call GetArrayPtr(ee, ptr) If ptr Then Debug.Print "数组已初始化" End Sub