请教,VB6 如何通过代码得到函数的名字
vb吧
全部回复
仅看楼主
level 12
qhdgug 楼主
Public Sub test1(strCallName As String)
Debug.Print "调用我的过程或函数是:" & strCallName
End Sub
Public Sub test2()
Call test1("test2")
End Sub
Public Sub test3()
Call test1("test3")
End Sub
...
Public Sub test100()
Call test1("test100")
End Sub
我想实现在test2、est3到test100中统一写成这样
Call test1(MyName)
vb6怎样能获得
正确的
MyName值呢?
谢谢各位
2020年07月20日 05点07分 1
level 9
看懵了,头大。
2020年07月20日 07点07分 2
level 13
没明白意思
Public Sub test2()
Call test1("test2")
End Sub
这种写法不对,就算可以按名称调用函数,这种递归调用处理不好就会无限循环(test2调用了test1,test1又调用了test2)
以下代码用CallByName按名称调用不同的函数,不知道是不是你要的效果
Option Explicit
Private Sub Form_Load()
CallByName Me, "test1", VbMethod
CallByName Me, "test2", VbMethod
End Sub
Public Sub test1()
MsgBox "test1"
End Sub
Public Sub test2()
MsgBox "test2"
End Sub
2020年07月20日 10点07分 4
level 12
qhdgug 楼主
谢谢回答,我描述的不是很清楚,重新整理一下:
假设有一个过程test1,它的作用是打印出调用它的过程或函数的名字,也就是打印出参数strCallName字符串
例如
test2调用test1时打印出的字符是:调用我的过程或函数是:test2
test3调用test1时打印出的字符是:调用我的过程或函数是:test3
以此类推
test100调用test1时,打印出的字符是:调用我的过程或函数是:test100
下面的写法可以达到目的(注意程序中的....相当于缩进,可恶的百度,编辑的时候挺好的格式,发表后空格全没了。)
Public Sub test1(strCallName As String)
....Debug.Print "调用我的过程或函数是:" & strCallName
End Sub
-------------------------------------------------------------------------------------------
Public Sub test2()
....Call test1("test2")
End Sub
--------------------------------------------------------------------------------------------
Public Sub test3()
....Call test1("test3")
End Sub
--------------------------------------------------------------------------------------------
---
--------------------------------------------------------------------------------------------
Public Sub test100()
....Call test1("test100")
End Sub
但是这样做不够灵活。我想找到一种方法能够得到过程或函数自身的名字,这样的话无论在哪里调用test1,都可以得到正确的结果。
假设有这样一个函数GetName能够以字符串形式返回过程或函数本身的名字,则所有调用test1的过程都可以统一写成这样:
Public Sub test2()
....Call test1(GetName)
End Sub
--------------------------------------------------------------------------------------------
Public Sub test3()
....Call test1(GetName)
End Sub
--------------------------------------------------------------------------------------------
---
--------------------------------------------------------------------------------------------
Public Sub test100()
....Call test1(GetName)
End Sub
2020年07月22日 06点07分 6
函数自身的名字很难得到,如果翻遍msvbvm60.dll的导出函数,应该是可以做到的,就像CallByName,要测试每个msvbvm60.dll的导出函数的功能工程量不是一般的大,估计这个问题目前无解
2020年07月22日 06点07分
Public 的 sub或Function在编译成exe时vb会将函数名、过程名等写入exe,所以理论上是可以得到函数名,CallByName就是函数导出到exe的函数名来调用的
2020年07月22日 06点07分
@隨風🍁缒夢 谢谢不厌其烦的回答,看来是没戏了,目前我的方法是在每个过程中加一个常量,Const strMethodName As String = "test2",但是还是治标不治本。
2020年07月22日 08点07分
@qhdgug 对,因为很少有人去这样做的,所以没有人去专门分析这个,其一执行效率不高,没多大意义
2020年07月22日 09点07分
level 5
函数内添加个字符串参数,字符串参数直接赋值函数的名字,然后其它事件直接获取这个参数的值
2020年07月22日 22点07分 7
是的,我现在就是这么干的。Const strMethodName As String = "test2"
2020年07月23日 02点07分
level 9
如果你的函数命名这么有规律,可以带数值参数
Public Sub test1(nn As integer)
Debug.Print "调用我的过程或函数是:test" & nn
End Sub
Public Sub test3()
....Call test1(3)
End Sub
2020年07月24日 08点07分 8
1