gpt4 book ai didi

vb6 - 全局函数是否有等效的 CallByName ?

转载 作者:行者123 更新时间:2023-12-02 07:40:58 24 4
gpt4 key购买 nike

我想这样做:“如果有一个模块X包含一个函数Y,则调用它,否则不调用。”

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

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

//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 的 hack,但 Matt Curland 说这很危险。这几乎是关于此事的最终决定:)

<小时/>

编辑:RS Conley 的答案不使用模块,而是使用具有 GlobalMultiUse 实例属性的类,并且您将能够使用 CallByName。如果您的代码位于 DLL 而不是 EXE 中,这将起作用。 RS Conley 建议无论如何,在 DLL 中拥有一个包含几乎所有功能的最小 EXE 会更加灵活:这很可能是正确的。

关于vb6 - 全局函数是否有等效的 CallByName ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com