当前位置 : 主页 > 编程语言 > c语言 >

vb6 – 全局函数是否有CallByName等价物?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我想这样做:“如果有一个模块X包含一个函数Y,那么就调用它,否则不要.” 我知道我可以使用CallByName(Object,MethodName,…)来调用对象实例的方法或属性. 是否可以调用未绑定到对象的全局
我想这样做:“如果有一个模块X包含一个函数Y,那么就调用它,否则不要.”

我知道我可以使用CallByName(Object,MethodName,…)来调用对象实例的方法或属性.

是否可以调用未绑定到对象的全局子/函数?

//Module1
Public Sub DoSomething
End Sub

//Module2
Public Sub TriggerDoSomething
  On Error Resume Next
  CallByName2 "Module1", "DoSomething", ...
End Sub

我知道,最好重构我的代码将DoSomething包装成一个类,但目前这是不可能的,因为它会以几个小时内无法修复的方式破坏我的同事的代码.

CallByName实际上会更容易一个类 – 你不能只用一个重定向调用模块的类来包装模块吗?

可以使用FunctionDelegator按名称调用模块中的例程.这在Matt Curland的优秀着作Advanced Visual Basic 6中有所解释.

谷歌搜索可能会找到一些使用CallWindowProc的黑客攻击,但是Matt Curland说这很危险.这几乎是关于此问题的最后一句话:)

编辑:RS康利的答案不使用模块,使用具有GlobalMultiUse的实例属性的类,您将能够使用CallByName.如果您的代码在DLL而不是EXE中,这将有效. RS Conley建议,在任何情况下,使用DLL中几乎所有功能的最小EXE都会更灵活:这可能是真的.

网友评论