我想这样做:“如果有一个模块X包含一个函数Y,那么就调用它,否则不要.” 我知道我可以使用CallByName(Object,MethodName,…)来调用对象实例的方法或属性. 是否可以调用未绑定到对象的全局
我知道我可以使用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都会更灵活:这可能是真的.