有没有办法在类中通过函数名取得函数指针,该怎么处理

有没有办法在类中通过函数名取得函数指针
在类中的,无论是Private 还是Public 
能否通过this(me)指针去计算某个函数或过程的首地址?

也就是类似AddressOf算子一样
如同这样 GetMyAddressOf(me,"类自身中的一个涵数名")




------解决方案--------------------
探讨
引用:
分不少,我蹭点

可以,不过即便得到了,也不能用于一般操作


下面这应该是你想要的
http://www.cnblogs.com/pctgl/articles/1586841.html

还在用标准模块实现子类化吗,你太out了

------解决方案--------------------
早期文章,有些内容说的不对,不过lz可以参考下开发过程
http://www.cnblogs.com/pctgl/articles/1352916.html

加强版本的文章
http://www.cnblogs.com/pctgl/articles/1566676.html


早期文章中,有关默认参数的问题,其实是 function 函数过程的返回值,sub 函数的返回值由于没有,所以不设计到以参数代替返回值的方式。


你要通用的也可以 

通用中声明一个数组: dim linkproc() as long

Private Function GetClassProcAddress(ByVal SinceCount As Long, ByVal ParamsCount As Long) As Long
Dim mePtr As Long
Dim jmpAddress As Long
mePtr = ObjPtr(Me)
CopyMemory jmpAddress, ByVal mePtr, 4
CopyMemory jmpAddress, ByVal jmpAddress + (SinceCount - 1) * 4 + &H1C, 4
ReDim LinkProc(8)
LinkProc(0) = &H83EC8B55: LinkProc(1) = &HFC8BFFEC: LinkProc(2) = &H3308758D: LinkProc(3) = &HFCFFB1C9
LinkProc(4) = &HFF68A5F3: LinkProc(5) = &HB8FFFFFF: LinkProc(6) = &HFFFFFFFF: LinkProc(7) = &HC2C9D0FF: LinkProc(8) = &HFF
CopyMemory ByVal VarPtr(LinkProc(1)) + 1, ParamsCount * 4, 1
CopyMemory ByVal VarPtr(LinkProc(3)) + 2, ParamsCount, 1
CopyMemory ByVal VarPtr(LinkProc(4)) + 3, mePtr, 4
CopyMemory ByVal VarPtr(LinkProc(6)), jmpAddress, 4
If ParamsCount = 0 Then CopyMemory ByVal (VarPtr(LinkProc(7)) + 3), &HC3, 1
LinkProc(8) = ParamsCount * 4
GetClassProcAddress = VarPtr(LinkProc(0))
End Function

使用方法:
类模块内的函数地址 = GetClassProcAddress (从最上面数,第N个公用函数,或者所有公用函数个数 + 第 N 个私有函数, 该函数的参数个数)

属性也算公用函数,数一下就行了,需要点使用技巧,这个东西还不是十分完善,都是早期临时写的,到后期也没什么兴趣完善他了,只不过后来补充了一个 GetWndProcAddress 用来实现子类化

GetClassProcAddress 获取的不是真正的函数地址,是一个用汇编构造的小函数地址,由这个函数转发调用真正的函数的过程, 真正的函数地址:
 CopyMemory jmpAddress, ByVal jmpAddress + (SinceCount - 1) * 4 + &H1C, 4
 这句就得到了,不过不能直接调用,因为这不是普通的标准模块中的函数,所以。。。 


虽然不是通过按名字取id然后获取函数地址的方式实现的
但这个过程可能是最简单的方法

说太多了。。。 lz 觉得没用就算了吧