如何使用Delphi在activeX中创建已发布的过程/函数?

如何使用Delphi在activeX中创建已发布的过程/函数?,delphi,activex,publish,Delphi,Activex,Publish,可能重复: 我正在使用Delphi的ActiveX控件实现。在我的主课上,我有: type TezDICOMX = class(TActiveForm, IezDICOMX) ToolBar1: TToolBar; OpenBtn: TSpeedButton; PreviousBtn: TSpeedButton; 。。。。 我将这些代码添加到类中 published procedure abc; safecall; 之后,我

可能重复:

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

  type
      TezDICOMX = class(TActiveForm, IezDICOMX)
        ToolBar1: TToolBar;
        OpenBtn: TSpeedButton;
        PreviousBtn: TSpeedButton;
。。。。 我将这些代码添加到类中

 published
procedure abc; safecall;
之后,我构建项目并注册ActiveX服务器。它生成ezDICOMax.ocx。我打开VisualStudio,删除之前嵌入的ezDICOM activeX控件,然后嵌入新控件。我将activeX控件拖到设计中,并将其命名为_ezdicom。 因此,正如我所想,我应该可以调用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源代码中,但我仍然无法添加已发布的过程/函数。

您需要:

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

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

    我发现这是Visual Studio的一个问题。因为我更改了activeX控件的接口,所以我必须删除项目中对activeX控件的引用,然后再次添加它。如果我们不更改接口,只需注销并注册activeX控件就足够了。

    您是否在delphi中编辑了类型库?是的,我编辑了类型库,但它会将过程abc添加到保护区域。所以我只是在发布区输入。如何编辑类型库以添加已发布的?我使用Delphi7。我确实从一些网站上读到说使用编辑->添加到界面。我将其与“程序abc1”一起使用。当我浏览源代码时,它被放在公共区域。当我使用treeview时,它也被放置在公共区域,但仍然是C#关于abc1的相同错误。谢谢你的回答。这也给了我一些观点。