Access窗体之间参数传递如何传递对象的通用模块函数

2017-07-22 22:25:00
zstmtony
原创
290

 我们知道在Access窗体之间可以传递各种参数。

但这些参数一般是字符或数字,有关Access窗体传递参数的技巧可以参考这里:

http://www.access-cn.com/info/1574-cn.html

但如何让Access之间可以传递对象这种参数呢。Access窗体本身并不提供这种功能


我在帮客户编写一个定制的Access软件系统时遇到了这个问题,后来 经过各种尝试

最终使用API实现了窗体之间传递对象参数的功能,后把它放在我们的Access通用开发平台中,再开源出来

详细源码如下:



Option Compare Database
Option Explicit

Private Const POINTERSIZE As Long = 4
Private Const ZEROPOINTER As Long = 0

Private Declare Sub apiCopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
 

'模块来源:Access中国
'作者:tmtony
'日期:2010年06月03日
 
'将对象转换为指针,用于窗体间参数传递
Public Function gf_ObjToPointer(ByRef objThisObject As Object) As Long
    Dim lngThisPointer As Long

    apiCopyMemory lngThisPointer, objThisObject, POINTERSIZE
    gf_ObjToPointer = lngThisPointer

End Function

'将指针转换为对象,用于窗体间参数传递
Public Function gf_PointerToObj(ByVal lngThisPointer As Long) As Object
    Dim objThisObject As Object

    apiCopyMemory objThisObject, lngThisPointer, POINTERSIZE
    Set gf_PointerToObj = objThisObject
    apiCopyMemory objThisObject, ZEROPOINTER, POINTERSIZE

  '  Set objThisObject = Nothing  '有些时候要去掉

End Function  
分享