您现在的位置:首页 >> API >> API >> 内容

Delphi写COM+的心得体会

时间:2011/9/3 15:45:31 点击:

  核心提示:1:COM+的编写:1:File----New----Other....----ActiveX Library 标签 下的 Transactional Object2: 然后填写: CoClss Na...

1:COM+的编写:

   1:File---->New---->Other....---->ActiveX Library 标签 下的 Transactional Object

   2: 然后填写: CoClss Name :类的名字,比如:ComPlus Threading Modal :线程模式:Apartment 选项: Supports transactions

   3:然后在View--->Library的对话框中增加方法 注意:如果参数为输出的话,则类型要是指针型,比如:Long * ,然后修改后面的参数in :out,ret

   4:最后完善增加的方法就ok了

 2:客户端调用的编写:

   1:先倒入Com+的接口类型. Project --->import Type Library---->选中你编写的Com+的类型,然后选择:Create Unit

3、安装COM+组件有两种方式,

   第一种(推荐):如果是在IDE环境里,点击“Run->Install COM+ Objects”即可把打开的Active Library项目安装到COM+环境中,注意:如果打开的项目是 一个普通的Application项目,是不能被安装到COM+环境中的。 将要安装的com+打上勾,然后在application中有两个选项:install to existing application :表示你的com+安装在com服务器的哪个组件包中, install to New application:表示将当前com+组件安装到一个新的组件包中.

   第二种办法:打开控制面板-> 管理工具->组件服务->计算机->我的电脑->COM+应用程序,在COM+应用程序的树项上点击 鼠标右键,选择“新建->应用程序”->创建一个空的应用程序,并为此应用程序命名,接下 来点击“下一步”直到结束即可。建立了空的COM+应用程序后,接下来就是把COM DLL安装 到COM+应用程序中了。在刚建立的空应用程序的树项中新建一个组件,选择“安装新组件”, 在打开文件对话框中选择要安装到COM+环境中的DLL文件,之后跟着向导做都可以了,要把 多个COM DLL安装到同一个COM+应用程序包中,只需重复以上步骤即可。

 4、“导出客户端组件包”指的是把已经注册的组件导出为.msi格式的文件,这些文件在客 户端安装后,只会在客户端注册组件,而不会安装多余的文件。如果不在客户端注册组件, 是不不能调用位于服务器上的组件的(此指服务器和客户端分布在不同的机器上时)。

 5:调试COM+程序 ---ok

    1.打开Windows中的组件管理,找到要调试的组件包,点右键,选择属性,在高级这页里选择调试选项,打勾; 然后在下面的调试路径中找到/processID:{1234} 复制出来

   2.在dephi中Run | Parameters… HOST APPLICATION 填入 {系统路径}\system32\dllhost.exe PARAMETERS 粘巾 /processID:{1234}

   3。很关键的一点:组件程序:project|option|linker|Include TD32 debug info 和Include remote debug symbols打勾

   4.启动delphi,运行要调试的Com+程序,设置断点,然后运行客户端程序即可进入到Com+断点.

   5.调试完后记得要在 Windows中的组件管理中的高级这页里调试选项勾去掉哟.

6:COM+需要注意的地方:

   1:客户机运行就会报 interface not supported 错误 大致原因:COM+的权限依赖于Windows的权限配置,在服务器需要有客户机的用户名和密码。 如果还不行,就在服务器上重新安装com+,重新导出.

    2:建立工程时,com+不能包含在工程组中.

   3:COM+不支持Oracle吗?在用事务的时候出错:Using Oracle with Microsoft Transaction Server and COM+

7:在COM+中添加远程数据模块

   1:File---->New---->Other....---->Multitier 标签 下的 Transactional Data Module

   2:然后在View--->Library的对话框中增加方法.

COM基本概念:

   1:COM是一个基于二进制的标准。打个比方,我们用Delphi实现了一个对象,一般情况下,我们只能在Delphi来生成这个对象的实例并调用,而如果我们用Delphi实现了一个COM对象的话,我们可以用VC、VB或者其他任何一种支持COM对象的语言来生成实例和调用。反过来也一样,我们可以在Delphi中使用各种COM对象,而不用介意它是用什么语言编写的。COM提供了分布式COM对象的机制,形象地说你可以调用另一台机器中的COM对象。COM+则是MTS的一个升级,在COM的基础上进一步提供了事务处理和其他很多Pool技术。

   2:线程模式:Apartment:多个线程服务.

   3:当建立COM+时选择的事务模式为Requires a Transaction,Com+会根据客户的的请求建立相应的事务,不仅仅时数据库,还会有系统资源等事务.成功SetComplete.回滚SetAbort. 选择Requires a Transaction表示当用户调用这个COM+组件时,COM+环境会为这个组件建立一个新的事务上下文,这和数据库的事务不是一回事。当你的COM+组件提交数据时如果出错,应该告诉事务上下文,只要调用COM+组件的SetAbort方法就可以。这样一来,处于同一个事务上下文的所有COM+组件都会Rollback。如果数据提交成功,应该调用SetComplete,不调用这个方法也可以,因为在默认情况下,COM+组件的事务状态设置为EnableCommite。当处于同一事务上下文的所有COM+组件对象都调用了SetComplete时,该事务上下文才会真正的向数据库提交数据。

   4:SetAbort合SetComplete是否正确调用

   5:建议:多个DLL在一个包,一个DLL中的COM公用一个ADOCONNECTION 6:问题:我已经在Transactional Data Module的Pooled属性里面设置了True了,但是在Win2000的组件服务管理的“组件属性”的“激活”一栏里面,仍然无法打开“启用对象共用”的选项 --->您可以将线程模式设置为tmNeutral或者tmBoth都可以。

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号