假设我们有一个已经存在的进程(或应用程序),调用了一个来自ocx文件的COM对象,例如“MyCOMLibrary.ocx”。
是否有一种方法编写一个C#库,以完全复制ocx文件?这样原始应用程序就可以调用您的C#代码而不是原始的COM对象?
当然,您必须使用与原始ocx相同的CLSID和ProgID。假设没有签名,例如.NET世界中的SNK。
此外,是否存在任何工具自动化此过程?是否有一些工具可以接收OCX并生成一些实现方法的C#文件?
编辑:我想补充说,原始应用程序是VB6,并且根本不使用.NET。他们很可能像VB6应用程序一样加载ocx(ProgId或Guid)。这会引起任何问题吗?
我们还没有完全重写ocx的问题 - 我们很可能只为所有方法返回成功错误代码,并仅使用我们情况需要的方法/事件。
编辑:您会认为这不应该太难实现。我们可以创建一个VB6 ocx文件来替换旧的ocx,并将所有调用传递给.NET程序集吗?
编辑:我尝试使用以下开源库:EasyHook 但似乎这个问题仍然可行。VB6似乎以防止挂钩的方式加载COM对象。我看不到使用EasyHook挂钩类/接口或类的构造函数的方法。
是否有一种方法编写一个C#库,以完全复制ocx文件?这样原始应用程序就可以调用您的C#代码而不是原始的COM对象?
当然,您必须使用与原始ocx相同的CLSID和ProgID。假设没有签名,例如.NET世界中的SNK。
此外,是否存在任何工具自动化此过程?是否有一些工具可以接收OCX并生成一些实现方法的C#文件?
编辑:我想补充说,原始应用程序是VB6,并且根本不使用.NET。他们很可能像VB6应用程序一样加载ocx(ProgId或Guid)。这会引起任何问题吗?
我们还没有完全重写ocx的问题 - 我们很可能只为所有方法返回成功错误代码,并仅使用我们情况需要的方法/事件。
编辑:您会认为这不应该太难实现。我们可以创建一个VB6 ocx文件来替换旧的ocx,并将所有调用传递给.NET程序集吗?
编辑:我尝试使用以下开源库:EasyHook 但似乎这个问题仍然可行。VB6似乎以防止挂钩的方式加载COM对象。我看不到使用EasyHook挂钩类/接口或类的构造函数的方法。