【问题标题】:How to implement IDispatch methods?如何实现 IDispatch 方法?
【发布时间】:2012-06-13 10:55:39
【问题描述】:

我玩过一个通过 COM 接口访问的第三方库。
对于一些测试,我创建了主窗体:

TForm1 = class (TForm, IThirdParyCOMInterface)

TForm1 实现了 IThirdParyCOMInterface 的所有方法,我得到了我需要的功能。

下一步是创建一个单独的类,仅用于处理此 COM 接口。
做这样的事情:

TMyClass = class (TInterfacedObject, IThirdParyCOMInterface)

导致编译器错误:

E2291 缺少接口方法 IDispatch.GetTypeInfoCount 的实现
E2291 缺少接口方法 IDispatch.GetTypeInfo 的实现
E2291 缺少接口方法 IDispatch.GetIDsOfNames 的实现
E2291 缺少接口方法 IDispatch.Invoke 的实现

( IThirdPartyCOMInterface = 接口 (IDispatch) )
似乎 TForm 已经实现了这些 IDispatch 方法,但我的新简单类没有。

我怎样才能为像上面这样的新课程做到这一点?
我应该从哪个类继承我的新类,以便这些 IDispatch 方法已经实现?

编辑:
我刚刚找到了 TAutoIntfObject。这是我需要的吗?
(COM 让我有点困惑,我只是在这里猜测)

【问题讨论】:

    标签: delphi com delphi-xe2


    【解决方案1】:

    在 COM 中做的传统事情,特别是如果您正在编写一个用作自动化服务器(又名 DCOM 服务器)的 EXE 进程,就是将您的 COM 接口与您的表单分开。

    哎呀,即使您正在编写不想变成巨大泥球的普通 Delphi 应用程序,这样做也是传统的做法。所以问问自己为什么要让 FORM 实现你的调度接口。即使在一个快速而肮脏的演示中,将 COM Server 类和表单混为一谈也很有趣,您不需要拥有。

    双界面(自动化)对象通常构建为它们自己的类,它可能私下引用您的表单。我建议你检查一下这样做。

    IThirdPartyComInterface应该由你自己的类TThirdPartyComInterface实现,并且应该是一个双COM(Native vtable + Dispatch)对象。

    然后您应该注册您的 COM 服务器对象,然后您就可以开展业务了。

    有各种教程,但似乎都不是最新的。这是Delphi 7.的一个@

    也许最好的去处是DocWiki,它将向您展示 Com 对象向导,您应该使用它来创建您的 TThirdPartyComInterface 类,该类将实现您的 IDispatch,以及本机 VTable COM(更高性能)一次.您可以将 IDispatch 入侵到您的 TForm 中,但每次您这样做时,我选择的子神或执政官都会执行我选择的小毛茸茸的动物。不要这样做。想想你正在杀死的那些毛茸茸的小动物。

    【讨论】:

      【解决方案2】:

      尝试使用TAutoObject 而不是TInterfacedObject。前者实现IDispatch,后者只实现IUnknown。 (在ComObj 单元中)

      【讨论】:

        猜你喜欢
        • 2011-12-25
        • 2022-01-14
        • 2021-04-12
        • 2014-10-17
        • 2013-11-29
        • 2011-11-28
        • 2011-06-12
        • 2019-04-04
        • 1970-01-01
        相关资源
        最近更新 更多