【发布时间】:2010-12-06 11:46:08
【问题描述】:
假设我们有一个现有的进程(或应用程序),它从诸如“MyCOMLibrary.ocx”之类的 ocx 文件调用 COM 对象。
有没有办法编写一个 C# 库来精确复制 ocx 文件?让原始应用程序可以调用您的 C# 代码而不是原始 COM 对象?
当然,您必须使用与原始 ocx 相同的 CLSID 和 ProgID。并假设不涉及签名,例如 .Net 世界中的 SNK。
另外,是否有任何工具可以自动执行此操作?接受一个 ocx 并输出一个 C# 文件,其中包含要实现的方法。
编辑:我想补充一点,原始应用程序是 VB6,根本不使用 .Net。他们很可能将 ocx 加载为 VB6 应用程序(ProgId 或 Guid)。这会导致任何问题吗?
我们完全重写 ocx 也没有问题——我们很可能只返回所有方法的成功错误代码,并且只使用我们情况所需的方法/事件。
编辑:您会认为这不会太难完成。我们能否制作一个可以替换旧 ocx 的 VB6 ocx 文件,并将所有调用传递给 .Net 程序集?
编辑:我尝试使用以下开源库:EasyHook
但似乎这个问题应该仍然可行。 VB6 似乎以防止挂钩的方式加载 COM 对象。我没有看到使用 EasyHook 在类/接口或类的构造函数上挂钩实例方法的方法。
【问题讨论】:
-
你的建议是可能的,但很危险。您将为任何应用程序替换此控件。除非您尝试破解某些东西,否则我不建议这样做,我也不建议这样做。 :)
-
我们正在尝试模拟硬件设备以与旧的销售点应用程序进行互操作。为 PC 全局替换此 ocx 不会有任何问题。