Hol*_*rwa 2 delphi com delphi-xe2
我玩过使用COM接口访问的第三方库.
对于某些测试,我创建了主窗体:
TForm1 = class (TForm, IThirdParyCOMInterface)
Run Code Online (Sandbox Code Playgroud)
TForm1实现了IThirdParyCOMInterface的所有方法,我得到了我需要的功能.
下一步是创建一个单独的类,仅用于处理此COM接口.
做这样的事情:
TMyClass = class (TInterfacedObject, IThirdParyCOMInterface)
Run Code Online (Sandbox Code Playgroud)
导致编译器错误:
E2291缺少接口方法IDispatch.GetTypeInfoCount的
实现E2291缺少接口方法IDispatch.GetTypeInfo的
实现E2291缺少接口方法IDispatch.GetIDsOfNames的
实现E2291缺少接口方法IDispatch.Invoke的实现
(IThirdPartyCOMInterface = interface(IDispatch))
似乎TForm已经实现了这些IDispatch方法,但我的新简单类却没有.
如何为上面这样的新课程做到这一点?
我应该从哪个类继承我的新类,以便已经实现了这些IDispatch方法?
编辑:
我刚刚找到了TAutoIntfObject.这就是我需要的吗?
(COM对我来说有点混乱,我只是在这里猜测)
War*_* P 5
在COM中做的传统事情,特别是如果您正在编写一个充当自动化服务器(也称为DCOM服务器)的EXE进程,则将COM接口与表单分开.
即使您正在编写普通的Delphi应用程序而不想变成一个巨大的泥球,这也是传统的做法.因此,问问自己为什么要使FORM实现您的调度接口.即使在一个快速而肮脏的演示中,将COM服务器类和表单混淆在一起也很有趣,你不需要.
双接口(自动化)对象通常构建为自己的类,可以私下对表单进行引用.我建议你检查一下这样做.
IThirdPartyComInterface应该由您自己的类实现TThirdPartyComInterface,并且应该是双COM(Native vtable + Dispatch)对象.
然后,您应该注册您的COM服务器对象,您将开始营业.
也许最好的去处是DocWiki,它将向您展示Com对象向导,您应该使用它来创建您的TThirdPartyComInterface类,它将同时实现您的IDispatch和本机VTable COM(更高性能).你可以将IDispatch攻入你的TForm,但每次你这样做时,我选择的一个神仙或执政官会执行我选择的小毛茸茸的动物.不要这样做.想想你正在杀死的那些小毛茸茸的动物.