PB与COM之关于创建COM,MTS, and COM+组件(1)


      看到这个标题是否觉得有些熟悉?其实是想用PB写一个COM组件~然后给用户端的程序调用。其中有F1帮助中的内容和网上收整的资料~然后整理出来。

      什么是COM组件?
      COM是Component Object Model (组件对象模型)的缩写,COM是一种通用的,用来描述Windows对象的二进制标准。这种标准可以包含其所描述的对象中的方法,数据能够被所有符合这一标准的程序或对象所调用。这就是说只要符合这一标准的开发工具,不论你用的编程语言是什么,都可以通过COM调用已经开发好的对象中的方法。那DLL(动态链接库)不是也有着这样的功能吗?实际上,DLL正是COM服务的一种表现形式,可以直接在应用程序中加入对DLL中函数的调用,以实现代码的重用和共享。

      那关于COM组件~系统有什么条件要求?下面我引用F1帮助里的一段解释。(翻译水平不行~有错请见谅)

      On platforms that support COM+, such as Windows 2000 and Windows XP, you can build COM+ applications and deploy them to COM+. On platforms that do not support COM+, such as Windows NT, but that have the required Microsoft Transaction Server (MTS) components installed, you can build COM servers and deploy them to MTS. 
      在Windows 2000 和 Windows XP 平台上支持COM组件,你能够创建COM+应用程序并将它们部署到COM +。Windows NT平台不支持组件,如果你要创建COM服务器并将应用程序部署到(Microsoft事务服务器),那么你必需要安装MTS。 
      帮助上写的还是很清楚的,但是,国内有一些PB的书写MTS是一个单独的产品,必须单独安装。并没有明确是什么平台需要安装,呵呵~看来是只译了一半,则又漏掉了一半。
      
      MTS(Microsoft Transaction Server) 用于在程序级进行事务操作
  多线程程序能够使程序的不同部分同时运行。Windows*和XP*等操作系统和许多科学应用都是多线程程序。当创建应用时,开发人员必须创建代码,以便线程能够独立运行,不互相干扰。
  是微软为其Windows NT操作系统推出的一个中间件产品,由于它具有强大的分布事务支持、安全管理、资源管理和多线程并发控制等特性,使其成为在Windows平台上开发大型数据库应用系统的首选产品。
       
      F1帮助中还明确指出了:Target wizard ,Object wizard ,Project wizard 三种向导在不同情况下的使用情况。值得注意的是当你使用COM/MTS组件 Target wizard ,Object wizard 向导生成一个新的用户对象时,这个对象与一般的用户对象是有一些区别:
      对象包含两个事件,Activate and Deactivate;
      并且对象具有COM/MTS的支持能力。

      引用F1内容:
      Application Techniques -> Developing Distributed Applications ->Chapter 26 Building a COM,MTS,or COM+ Component ->About building COM,MTS,or COM+ Component。
      有兴趣的可以查看相关的内容。

在c# 2005中编写com组件,供PB11调用实例,研究了一下午,终于成功了,分享给大家 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。 1、c#2005中新建项目,类型为类库,项目名为AddCom确定。   配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)” 2、打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用 3、编写com组件会用到guid(全球唯一ID),编写com组件必须要用到。c#会默认生成一个放在AssemblyInfo.cs,如没有生成,网上下一个生成guid的软件,有很多呢。 4、c#中源代码如下,按如下方法编写代码后生成工程,/bin/release中得到AddCom.dll。 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace AddCom { [Guid("298D881C-E2A3-4638-B872-73EADE25511C")] public interface AddComInterface { [DispId(1)] int iadd(int a, int b); } [Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")] [ClassInterface(ClassInterfaceType.None)] public class AddComService : AddComInterface { public AddComService() { } public int iadd(int a, int b) { int c = 0; c = a + b; return c; } } } 5、dos下利用 e:\regasm AddCom.dll 命令注册com组件,可以理解为非.net平台下的regsvr32注册dll组件。提示注册成功即可。 6、pb11中利用ole调用来调用com组件,注意,此com组件无法用create ole control的browse查看到,只能利用如下的方法直接动态调用。 integer li_a,li_b,li_total //----------注册c#生成的com组件------------ OleObject ole_AddCom ole_AddCom = Create OLEObject li_rc = ole_AddCom.ConnectToNewObject("AddCom.AddComService") //AddCom为c#中namespace,AddComService为c#中namespace中的class if li_rc <> 0 then MessageBox("ConnectToNewObject", string(li_rc) ) return end if //----------调用com组件中的函数-------------- li_total = ole_AddCom.iadd(li_a, li_b) //iadd为c#中namespace(AddCom为c)中class(AddComService为c)中的函数(iadd()) 完毕 *以上为个人经验,欢迎大家发邮件沟通。 email: kair-china@vip.sina.com qq: 55092518
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值