Delphi中不进行组件注册而直接调用COM对象
来源:互联网 发布:c4d安装包mac下载 编辑:程序博客网 时间:2024/05/05 17:13
在Windows下,可以用系统提供的regsvr32工具注册和卸载COM组件:
注册:regsvr32 文件名
卸载:regsvr32 /u 文件名
COM组件一般存在于动态链接库中,库文件扩展名为dll,ocx,ax(音频和视频的Filter)等。必须导出以下4个函数:
function DllGetClassObject(const CLSID, IID: TGUID; var Obj): HResult; stdcall;
function DllCanUnloadNow: HResult; stdcall;
function DllRegisterServer: HResult; stdcall;
function DllUnregisterServer: HResult; stdcall;
regsvr32就是调用组件库导出的DllRegisterServer函数来注册组件,调用DllUnregisterServer来卸载组件的,实际上注册就是在系统注册表里写入一些信息,卸载时删除这些信息。
大部分程序写作者都是采用注册ActiveX控件的方式来使用COM组件的,这样确实方便,但是如果运行程序的机器上没有注册该组件,程序就会因找不到组件而自动退出。实际上,不注册照样是可以使用COM组件的。这就是要用到组件库导出的DllGetClassObject了,COM对象是由类工厂 (ClassFactory)创建的,每个COM类有其各自的类工厂。DllGetClassObject函数就是用来获取CLSID标志的类的类工厂接口(IClassFactory)的,IClassFactory的GUID为
const
IID_ICLASSFACTORY:System.TGUID = '{00000001-0000-0000-C000-000000000046}';
得到了IClassFactory接口后,就可以调用接口的CreateInstance方法来获得实现具体功能的COM对象的接口了:
function CreateInstance(const unkOuter: IUnknown; const iid: TIID; out obj): HResult; stdcall;
unkOuter参数跟COM聚合(Aggression)有关,如果没有用到聚合,可以传递0指针。iid为所要获得的接口的GUID,如果调用成功,输出参数obj就指向类工厂生成的接口,可以调用它的方法来使用COM组件了。
- Delphi中不进行组件注册而直接调用COM对象
- 不注册COM组件直接调用接口
- 不注册COM组件直接调用接口
- Delphi(Lazarus)怎样不注册调用COM
- 调用DllRegisterServer进行COM组件的注册
- 不注册直接使用COM组件的方法
- 不注册直接使用COM组件的方法
- 不注册直接使用COM组件的方法
- 不注册直接使用COM组件的方法
- DELPHI中COM组件编写及调用
- Delphi 怎么不注册 dll 就调用 com
- 调用DllRegisterServer方法进行COM组件的注册
- 调用DllRegisterServer方法进行COM组件的注册
- 不注册dll调用atl实现的com对象
- 怎样用DELPHI调用COM组件
- 在.NET应用程序中不注册使用ocx Com组件
- Delphi不注册COM直接使用ActiveX控件并绑定事件
- delphi 注册 com 对象的方法
- 全面总结php在cli命令行模式下的使用
- js高级特性
- Android系统是目前最为流行的手机系统之一
- VC程序调试的小技巧
- MySQL远程访问时非常慢的解决方法
- Delphi中不进行组件注册而直接调用COM对象
- Symbian 创建APN
- BlackBerry Tablet OS SDK (操作系统开发工具包) UI指南(一)
- 用py2exe打包包含pymssql连接sql server遇到问题
- VC 运行时库中的 new/delete 使用
- APN symbian手机上的接入点编程
- VS2005不能调试 IE8 断点无效 .NET不能调试
- 将函数声明为 static final 可以提高运行速度
- ArcGIS API for Android 案例教程 12