我玩过一个第三方库,它是通过COM接口访问的。
对于一些测试,我创建了主表单如下:
TForm1 = class (TForm, IThirdParyCOMInterface)TForm1实现了IThirdParyCOMInterface的所有方法,我得到了所需的功能。
下一步是创建一个单独的类,只用于处理这个COM-Interface。
做这样的事:
TMyClass = class (TInterfacedObject, IThirdParyCOMInterface)编译器错误的结果:
E2291缺少接口方法IDispatch.GetTypeInfoCount的实现 E2291缺少接口方法IDispatch.GetTypeInfo的实现 E2291缺少接口方法IDispatch.GetIDsOfNames的实现 E2291缺少接口方法IDispatch.Invoke的实现
( IThirdPartyCOMInterface =接口(IDispatch) )
看来TForm已经实现了这些IDispatch方法,但是我的新的简单类没有实现。
我怎样才能为像上面这样的新类做这件事呢?
我应该从哪个类继承我的新类,以便这些IDispatch方法已经实现?
编辑:
我刚找到TAutoIntfObject。这就是我需要的吗?
(COM有点让我感到困惑,我只是在这里猜测)
发布于 2012-06-10 02:50:26
在COM中要做的传统事情,特别是当您正在编写作为自动化服务器(又名DCOM Server)的EXE进程时,是将COM接口与表单分开。
见鬼,即使在编写正常的Delphi应用程序时,你也不想变成一个巨大的泥球,这也是传统的做法。因此,问问自己为什么要让表单实现您的调度接口。即使在一个快速而肮脏的演示中,将COM Server类和表单混为一谈只是你不需要拥有的乐趣。
双接口(自动化)对象通常是作为它们自己的类构建的,这些类可能私下中引用您的表单。我建议你这样做。
IThirdPartyComInterface应该由您自己的类TThirdPartyComInterface实现,并且应该是一个双COM(本机vtable +调度)对象。
然后,您应该注册您的COM服务器对象,然后您将进行业务。
有各种各样的教程,但似乎没有最新的。这是德尔菲7。的一个
也许最好的选择是DocWiki,它将向您展示Com对象向导,您应该使用它来创建实现IDispatch的TThirdPartyComInterface类,再加上本地的VTable COM (更高的性能)。你可以把IDispatch黑进你的TForm,但是每次你这么做的时候,我选择的一个亚神或弓箭手就会执行我选择的一只毛茸茸的小动物。不要这样做。想想你要杀的那些毛茸茸的小动物。
发布于 2012-06-11 13:32:55
尝试使用TAutoObject而不是TInterfacedObject。前者实现IDispatch,后者只实现IUnknown。(它在ComObj单元中)
https://stackoverflow.com/questions/10964810
复制相似问题