gpt4 book ai didi

delphi - 如何实现IDispatch方法?

转载 作者:行者123 更新时间:2023-12-02 05:59:51 24 4
gpt4 key购买 nike

我使用过通过 COM 接口(interface)访问的第三方库。
对于一些测试,我创建了主表单:

TForm1 = class (TForm, IThirdParyCOMInterface)

TForm1 实现了 IThirdParyCOMInterface 的所有方法,并且我获得了所需的功能。

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

TMyClass = class (TInterfacedObject, IThirdParyCOMInterface)

导致编译器错误:

E2291 Missing implementation of interface method IDispatch.GetTypeInfoCount
E2291 Missing implementation of interface method IDispatch.GetTypeInfo
E2291 Missing implementation of interface method IDispatch.GetIDsOfNames
E2291 Missing implementation of interface method IDispatch.Invoke

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

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

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

最佳答案

在 COM 中要做的传统事情是将 COM 接口(interface)与表单分开,尤其是当您正在编写充当自动化服务器(又名 DCOM 服务器)的 EXE 进程时。

哎呀,即使您正在编写您不想变成一个巨大的泥球的普通 Delphi 应用程序,这样做也是传统的做法。因此,问问自己为什么要让 FORM 实现您的调度接口(interface)。即使在快速而肮脏的演示中,将 COM 服务器类和表单合并起来也很有趣,您不需要这样做。

双接口(interface)(自动化)对象通常构建为其自己的类,该类可能私下引用您的表单。我建议您尝试这样做。

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

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

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

也许最好的地方是 DocWiki这将向您显示 Com 对象向导,您应该使用它来创建 TThirdPartyComInterface 类,该类将同时实现 IDispatch 和 native VTable COM(更高性能)。您可以将 IDispatch 侵入您的 TForm,但每次您这样做时,我选择的次神或执政官都会处决我选择的毛茸茸的小动物。不要这样做。想想你正在杀死的所有那些毛茸茸的小动物。

关于delphi - 如何实现IDispatch方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964810/

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