'可以使用CopyMemory ,varptr,objptr来获取,代码如下: '此代码的功能,由地址来获取对象 Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)Private Sub Command1_Click() Dim nObjPtr As Long nObjPtr = ObjPtr(Me) '假设nObjPtr为对象的地址Dim o As Object 'CopyMemory o, ByVal VarPtr(Me), 4 ' 运行这句之后,o就是指向me的对象 CopyMemory o, nObjPtr, 4 ' 运行这句之后,o就是指向me的对象MsgBox o.Name CopyMemory o, 0&, 4 '释放内存 End Sub
最后这位朋友说的方法好象能行的
具体怎么代码实现?
句柄直已经知道了
getclass有好几个类似名字的api函数,不太清楚怎么用
谢谢了.
'此代码的功能,由地址来获取对象
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)Private Sub Command1_Click()
Dim nObjPtr As Long
nObjPtr = ObjPtr(Me) '假设nObjPtr为对象的地址Dim o As Object
'CopyMemory o, ByVal VarPtr(Me), 4 ' 运行这句之后,o就是指向me的对象
CopyMemory o, nObjPtr, 4 ' 运行这句之后,o就是指向me的对象MsgBox o.Name
CopyMemory o, 0&, 4 '释放内存
End Sub
也是可行的。
如果是外部的对象,干脆使用API操作,别打算使用VB中的对象方式操作(我认为也不可能)
但是调用控件时并不知道控件名,只是消息处理函数的参数传过来了控件的句柄。
不然能得到刚才获得焦点的控件也可,转入模块中的消息处理程序时,activecontrol对象就是空的了
前面那位朋友是用地址得到对象,现在是句柄,能从句柄直接得到地址吗?
我现在就是用最土的方法,each next遍历所有form再遍历control,土吧..