gpt4 book ai didi

c# - 创建现有 COM 对象的新 C# 版本以在 Delphi 程序中使用

转载 作者:行者123 更新时间:2023-11-30 22:49:28 27 4
gpt4 key购买 nike

我们遇到了一些问题,我们丢失了一些我们拥有的非常旧的 ActiveX 组件的源代码。我们有一个调用 Active X 组件的 Delphi7 程序。这是一个有点,不能改变太多。但是,Active X 组件中的某些功能需要更新。由于我们一直在将我们的应用程序转移到 C#,因此决定将 ActiveX 重做为 C# 类库。

我有一个基本的 C# 类库来证明这个概念。我可以破解 GUID 和注册表,所以它看起来就像旧的一样。如果我查看旧版本和新版本的类型库,它们基本上是相同的。有一些细微差别,但我认为不会有任何问题。

现在据我所知有三种使用新类库的方法:

  1. 通过查找 ProgId 进行后期绑定(bind)。这工作正常。

  2. 导入类型库。 (项目|导入类型库)这工作正常。

  3. 作为 ActiveX 组件导入。这会生成一个 tlb 文件。这是行不通的。当我去创建组件时,我得到“不存在这样的接口(interface)”。类(class)正在加载到一定程度但尚未完全加载。

现在不幸的是,Delphi 程序正在使用选项 3。所以我必须尝试让我的类库在这种情况下工作。我有什么想法可以克服这个错误吗?我用谷歌搜索并找到了一些引用资料,但没有说明问题所在。

第二个问题。我应该知道怎么做,因为我已经做过一次了,但我似乎侥幸成功了。当我在 Delphi 中时,我执行一个 Import ActiveX 组件来生成一个 TLB 文件。现在生成的第一个 C# 类库出现在 ActiveX 控件列表中,我可以为它创建单元。但是我已经为测试目的创建了另一个更简单的类库,如果我能让这个库显示在 ActiveX 控件列表中就该死了,所以我无法导入它。

Active X 组件的创建单元生成一种与导入类型库格式不同的 TLB.pas 格式及其我需要的 ActiveX 格式。

最佳答案

ActiveX 控件所做的远不止是实现您的界面。它更像是一个 TComponent 或 TWinControl。它要求您实现更多的 ActiveX 控件接口(interface)。通过 COM/ActiveX 公开的 C# 对象不是控件,而是一个简单的类。

它不会出现在导入 ActiveX 控件中,因为它不是 ActiveX 控件。我认为让您的 C# 类成为 Active Control 是不可行的。

关于c# - 创建现有 COM 对象的新 C# 版本以在 Delphi 程序中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109561/

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