创建现有COM对象的新C#版本以在Delphi程序中使用
我们遇到了一个小问题,丢失了一些旧ActiveX组件的源代码。我们有一个Delphi7程序,它调用活动X组件。这有点大,不能改变太多。但是,Active X组件中的某些功能需要更新。由于我们一直在将应用程序迁移到C#,因此决定将ActiveX重新作为C#类库 我有一个基本的C#类库来证明这个概念。我可以破解guid和注册表,这样看起来就像旧的一样。如果我看一下旧的和新的类型库,它们基本上是相同的。有几处细微的差别,但我认为不会有什么问题 现在,据我所知,有三种方法可以使用新类库:创建现有COM对象的新C#版本以在Delphi程序中使用,c#,delphi,com,activex,C#,Delphi,Com,Activex,我们遇到了一个小问题,丢失了一些旧ActiveX组件的源代码。我们有一个Delphi7程序,它调用活动X组件。这有点大,不能改变太多。但是,Active X组件中的某些功能需要更新。由于我们一直在将应用程序迁移到C#,因此决定将ActiveX重新作为C#类库 我有一个基本的C#类库来证明这个概念。我可以破解guid和注册表,这样看起来就像旧的一样。如果我看一下旧的和新的类型库,它们基本上是相同的。有几处细微的差别,但我认为不会有什么问题 现在,据我所知,有三种方法可以使用新类库: 通过查找Pro
活动X组件的创建单元生成与导入类型库格式不同的TLB.pas格式,并生成我需要的ActiveX格式 ActiveX控件的作用远不止实现您的接口。它更像是一个TComponent或TWinControl。它要求您实现更多的ActiveX控件接口。通过COM/ActiveX公开的C#对象不是控件,而是一个简单的类
它不会显示在导入ActiveX控件中,因为它不是ActiveX控件。我认为将您的C#类设置为活动控件是不可行的。另一种可能性,尽管可能不是最优雅的,是在Delphi中创建一个新的ActiveX com对象,它反过来通过您已经使用过的任何一种方法调用您的C#类 由于您声明这是针对现有的Delphi 7应用程序的,因此您可能只想在C#端使用Com互操作,将对象公开为Com可见,然后直接从Delphi 7应用程序使用它
第一个选项可能允许您对现有应用程序进行最小的更改,但确实添加了一个很可能不需要的附加层 但我创建的第一个示例确实出现在我的ActiveX控件lsit中。但我不知道它是怎么出现在那里的!这个tlb几乎和原来的tlb完全一样!