• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi下的COM编程技术 - 1

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、建立 COM 对象

File ”菜单上的“ New ”命令,翻到“ ActiveX ”页,然后双击“ COM Object ”图标。


具体方法如下:

   1 、在“ Class Name ”框内输入 C0M 对象的类名,不必以 T 打头。

2 、在“ Instancing ”框内指定 COM 对象的实例模式。对于 InProcess 类型的服务器来说不必指定实例模式。

   3 、在“ Threading Model" ,柜内选择一种线程模式,可以设为以下值:

    Single :整个 COM 服务器都是单线程的

    Apartment :每个 COM 对象的实例有单独的线程。这样,凡是需要共享的数据 ( 诸如全局变量 ) 必须用线程同步对象保护;

    Free :一个 COM 对象的多个实例可以同时运行,这意味着 COM 对象必须保护自己的实例数据,以避免多个实例相冲突:

    Both :同时支持 Apartment Free 两种线程模式。

  在“ Implemented Interfaces ”框内输入让 COM 对象实现的接口名称 ( 可选 ) 。默认情况下向导所创建的 COM 对象只实现 IUnknown 接口。如果选中“ Include Type Library 复选框,向导将生成一个类型库。

  如果选中“ Mark interface OleAutomation 复选框,将使接口支持 Ole Automation 。不过,类型库中的数据类型必须是与 Ole Automation 兼容的类型。单击“ OK ”按钮,向导将创建一个 COM 对象。如果选中丁“ Include Type Library 复选框,向导将创建 1 个类型库。同时,向导将生成 COM 对象的单元文件。


点击“OK”按钮后,生成的代码如下:

unit UmyTest; {$WARN SYMBOL_PLATFORM OFF} interface uses Windows, ActiveX, Classes, ComObj, Project1_TLB, StdVcl; type TMyTest = class(TTypedComObject, IMyTest) protected {Declare IMyTest methods here} end; implementation uses ComServ; initialization TTypedComObjectFactory.Create(ComServer, TMyTest, Class_MyTest, ciInternal, tmApartment); end.


接口对象是一个类,但保留字 class 后列出了两个祖先 :

第一个祖先必须是 TObject 的派生类,这里是 TTypedComObject;

第二个祖先是要实现的接口,这里是 IXXH

第一个祖先可以是其他已声明过的接口对象,表示正在声明的接口对象同时支持多个接口。接口的第一个成员必须是 CLSID 。在某些需要传递 CLSID 常量的场合.可以直接用接口名称来代替 CLSID 常量。当然,目前 IXXH 接口中还没有其他成员。

   COM 对象的实例是通过类工厂来建立的。每个 COM 对象都有一个类工厂。类工厂本身的实例是在单元的 initialization 部分建立的。这样,一旦 COM 服务器调入内存运行,就会创建类工厂的实例,也就随时可以根据客户的请求创建 COM 对象的实例。

  要让 Windows 能找到 COM 服务器, COM 服务器必须在 Windows 的注册表中登记注册。

这需要借助于一个叫 Regsvr32.exe 的命令行程序。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB奇异值分解压缩图像发布时间:2022-07-18
下一篇:
【Matlab&Mathematica】对三维空间上的点进行椭圆拟合发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap