0

可能重复:
无法访问 delphi ActiveX 控件中的公共功能?

我正在使用 Delphi 的 ActiveX 控件实现。在我的主要课程中,我有:

  type
      TezDICOMX = class(TActiveForm, IezDICOMX)
        ToolBar1: TToolBar;
        OpenBtn: TSpeedButton;
        PreviousBtn: TSpeedButton;

....我将这些代码添加到类中。

 published
procedure abc; safecall;

之后,我构建项目并注册 ActiveX 服务器。它生成 ezDICOMax.ocx。我打开visual studio,删除我之前嵌入的剩余ezDICOM activeX控件并嵌入新的。我将 activeX 控件拖到设计中并将其命名为 the_ezdicom。所以我认为,我应该可以调用 the_ezdicom.abc(),但是当我这样做时,编译器会抱怨

'AxezDICOMax.AxezDICOMX' does not contain a definition for 'abc' and no extension method 'abc' accepting a first argument of type 'AxezDICOMax.AxezDICOMX' could be found (are you missing a using directive or an assembly reference?) 

我做错了什么?如何使用 Delphi 在 ActiveX 控件中创建已发布的过程/函数?如果我更改类中的现有函数/过程并执行所有注册、嵌入步骤,当我从 C# 调用时该函数/过程的结果也会发生变化,所以我认为 activeX 控件已更新到我的 Delphi 源,但是我仍然无法添加已发布的过程/功能。

4

2 回答 2

2

你需要:

  1. 编辑类型库(使用类型库编辑器)以添加新方法
  2. 刷新实现(这可以由类型库编辑器自动完成,具体取决于您的 IDE 设置),在生成的方法体中编写您的实现代码
  3. 构建并重新注册您的 ActiveX 服务器(以防您添加了新的接口或数据类型);以管理员身份运行 regsvr32,因为它需要访问受保护的注册表分支。

在这种情况下,实现方法的 Delphi 可见性无关紧要:该类应该通过接口指针使用,而不是通过 Delphi 类实例指针。因此,我建议对其进行保护,由类型库编辑器生成。

于 2012-09-09T10:09:40.670 回答
0

我发现这是 Visual Studio 的问题。因为我改变了我的activeX控件的界面,所以我必须在我的项目中删除对activeX控件的引用,重新添加。如果我们不改变界面,只需注销并注册activeX控件就足够了。

于 2012-09-09T16:42:13.153 回答