Vb6 向已编译的OCX添加功能

Vb6 向已编译的OCX添加功能,vb6,ocx,Vb6,Ocx,我们有一个旧的OCX,在旧的VB应用程序中使用。 现在开发人员不支持这两种方法。源代码也不可用。 OCX包含一个计算值的函数,现在我们必须更改计算公式。 有没有办法重写方法并创建具有相同功能的新闻ocx 编辑:ocx包含一个日期选择器,它使用mscomctl2.ocx,我们的公式基于所选日期,因此,如果我们能够找到一个解决方案来更改选择后的日期,我们可以满足我们的需要。还有另一种方法,只有当您是该ocx文件的所有者时才可以安全使用。您可以使用vb反编译器从ocx文件中获取源代码,以便修改和创建新

我们有一个旧的OCX,在旧的VB应用程序中使用。 现在开发人员不支持这两种方法。源代码也不可用。 OCX包含一个计算值的函数,现在我们必须更改计算公式。 有没有办法重写方法并创建具有相同功能的新闻ocx


编辑:ocx包含一个日期选择器,它使用mscomctl2.ocx,我们的公式基于所选日期,因此,如果我们能够找到一个解决方案来更改选择后的日期,我们可以满足我们的需要。

还有另一种方法,只有当您是该ocx文件的所有者时才可以安全使用。您可以使用vb反编译器从ocx文件中获取源代码,以便修改和创建新的源代码。这是一个反编译器

您可以使用OCX、使用挂钩、修补内存或完全重写其他注释和答案中提到的内容

但我要做的第一件事是在你的OCX上做一个包装。如果您的功能在之前或之后替换了一些功能或添加了一些功能,那么包装器(也称为代理模式)是最佳选择


此方法的示例是使用OpenGL的dx3d周围的DLL。

尝试将其挂接,这样挂接链接就没有用了。不能修改已编译的OCX。您可以用一个新的OCX替换它(与旧的OCX进行二进制兼容的编译),但是您需要复制它的公共接口中的所有功能。@AlexK。难道你不能写另一个控件,它是用户正在描述的控件的包装器,并在Ashian感兴趣的函数中进行正确的计算吗?我猜这也取决于它是什么类型的控件,以及它公开了他需要进行计算所需的属性。新的OCX需要与旧的相同的typelib CLSID/ProgID,以便VB6应用程序能够加载和早期绑定到它-如果你编译新的,并且与旧的兼容,那么你可以这样做-但是,您需要找到一个黑客来访问旧的OCX,从COM的角度来看,旧的OCX将被新的OCX所取代。OCX中包含许多方法和事件。我们只需要对它做一个简单的改变。当日期选择关闭时,更改必须关闭(ocx使用mscomctl2.ocx),因此如果我们可以找到mscomctl2.ocx的替代方案,我们可以根据新公式更改所选日期,我们可以满足我们的需要。