第二种方法(用名称来调用)
适用于所有的语言,好处是不用导入类型了,缺点是调用的速度慢,还有开发时编译器不检查。
用第二种方法不需要类型库了,代码是var myobj:variant;myobj=CreateOleObject('mylib.myobj');之后就可以用了,这个方便吧。其实为了实现用名字调用,需要加上IDispatch接口,不过delphi都自动给我们加好了,不用管直接用就行。
1>、idispatch是COM object的接口, 在Delphi中通常指一个OleObject.
2>、 OleVariant是一种COM object兼容的Variant类型, 可以通用任何Ole Automation 类型, 他与CreateOleObject创建的idispatch兼容 。
(COM组件的编写和COM+组件的编写差不多,所以只写COM+组件的编写情况)
二、COM+编写的具体实例:
1、Com+的编写:
1>、File---->New---->Other....---->ActiveX Library 标签下的 Transactional Object
2>、然后填写: CoClss Name :类的名字,比如:ComPlusThreading Modal :线程模式:Apartment 选项: Supports transactions
当建立COM+ 时选择的事务模式为Requires a Transaction, COM+会根据客户的的请求建立相应的事务,不仅仅是,还会有系统资源等事务.成功SetComplete.回滚SetAbort. 选择Requires a Transaction表示当用户调用这个COM+组件时,COM+环境会为这个组件建立一个新的事务上下文,这和的事务不是一回事。当你的COM+组件提交数据时如果出错,应该告诉事务上下文,只要调用COM+组件的SetAbort方法就可以。这样一来,处于同一个事务上下文的所有COM+组件都会Rollback。如果数据提交成功,应该调用SetComplete,不调用这个方法也可以,因为在默认情况下,COM+组件的事务状态设置为EnableCommite。当处于同一事务上下文的所有COM+组件对象都调用了SetComplete时,该事务上下文才会真正的向提交数据。
3>、然后在View--->Library的对话框中增加方法 注意:如果参数为输出的话,则类型要是指针型,比如:Long * ,然后修改后面的参数in :out,ret
4>、最后完善增加的方法就ok了
2、客户端调用的编写:
1>、先倒入Com+的接口类型. Project --->import Type Library---->选中你编写的Com+的类型,然后选择:Create Unit
3、安装COM+组件有两种方式,
1>、第一种(推荐):如果是在IDE环境里,点击"Run->Install COM+ Objects"即可把打开的Active Library项目安装到COM+环境中,注意:如果打开的项目是 一个普通的Application项目,是不能被安装到COM+环境中的。 将要安装的com+打上勾,然后在application中有两个选项:install to existing application :表示你的com+安装在com服务器的哪个组件包中, install to New application:表示将当前com+组件安装到一个新的组件包中.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-46133-4.html
说的是真的