分享
 
 
 

VB.NET访问COM+

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

VB.NET访问COM+

摘要

1. 关于COM+

2. VS.NET访问COM+

3. Demo

1.关于COM+

以前我们用VB6开发管理程序的时候,考虑到软件的扩充,维护以及不同客户端的情况,我们一般采用下面所谓的三层架构,其中COM+一般用作中间层,COM+的一个主要特性就是它扩展了中间层组件以便其支持成百上千乃至上万同时访问的客户能力:

VB开发的中间层直接采用ADO访问数据库,如果查询记录,一般返回ADODB.RecordSet,在商业逻辑层跟UI传递数据的时候,我们可以采用断开的记录集(Disconnected Recordset),或者Recordset的GetRows()方法,返回数组,以及XML传递数据。

而且由于使用了COM+,我们很容易把UI层改为浏览器形式的Asp文件,从而使得Internet调用COM+。

2.VS.NET访问COM+

有些应用程序需要与您自己的 COM+ 组件或与 Microsoft 及第三方提供的 COM+ 组件进行交互,或者处于升级的需要,我们不得不考虑VS.NET访问COM+。为了简化这些应用程序的开发过程,公共语言运行时提供了一组功能,可以隐藏受控和非受控编程模型之间的差异,例如调用约定和错误处理。Visual Studio .NET 通过这些功能来编写受控代码,来访问由 COM DLL 实现的功能,就好像 COM 接口是用受控代码编写的一样。这是因为当您在 Visual Studio .NET 中添加一个对 COM 类型库的引用时,就为类型库中说明的 COM 接口生成了受控包装程序。当然,这也意味着从受控代码访问 COM 功能时在性能上会有一点损失。

仔细考虑一下,我们现在是.NET的应用程序访问VB写的COM+,两者的数据类型、调用机制、对象生存周期的管理等等都不尽相同,谁来协调两者的不同呢?那就是RCW(Runtime Callable Wrapper)。关系如下图:

RCW充当一个“转换器的作用”,通过它的作用机制使得COM+像一个真正的.NET对象,从而能被.NET的应用程序使用。后面的处理就很简单了,我们所引用的COM+充当一个NameSpace,可以方便使用其各种操作。

怎么样使用RCW?

有两种方式,如果你用VS.NET的集成开发环境,那很简单。只要,在Project的引用中加入要调用的COM+对象,系统会自动生成并且加到程序中。

或者使用 tlbimp.exe(类型库导入程序)实用工具来自己生成一个程序集。可从大多数 COM 类型库生成程序集。如果该程序集是要共享的,则必须用发行者密钥对该程序集签名。tlbimp.exe 可使用 /keyfile 选项生成签名的程序集。 其实,两者都是利用System.Runtime.InteropServices.TypeLibConverter来读取COM+,产生RCW的程序集。

3.Demo:

系统配置

OS:Win2k Advanced Server

Database:SQL Server

Develop Tools:VB6 & VS.NET

我们演示一个.NET调用COM+的例子,COM+的一个GetProducts函数访问数据库NorthWind,返回一个RecordSet。然后在.NET中调用它,显示在DataGrid中。

首先创建一个简单的COM+ :

打开VB6,添加一个Activex Dll,把Class1的Name改为Getter,工程名改为ComPlusDemo。打开Getter的代码窗口,加入一下代码。

'获取Northwind库中Products表中所有的产品名以及单价

Public Function GetProducts() As ADODB.Recordset

Dim cnn As ADODB.Connection

Dim cmd As ADODB.COMmand

On Error GoTo ErrorHandling

Set cnn = New ADODB.Connection

cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _ "Persist Security Info=False;Initial Catalog=Northwind;Data Source=(local)" cnn.CursorLocation = adUseClient

cnn.Open

Set cmd = New ADODB.COMmand

cmd.ActiveConnection = cnn

cmd.COMmandText = "Select ProductName,UnitPrice from Products"

Set GetProducts = cmd.Execute

Exit Function

ErrorHandling:

Set GetProducts = Nothing

End Function

选择文件中编译,生成ComPlusDemo.Dll。

然后加入到Win2k Server的Component Services里面。

选择“管理工具”中的Component Services,如图:

右击选择New->Application.出现COM Application Install的向导。点击下一步,选择Create an empty Application,点击出现一个输入新程序名的窗口,输入MyApp,下一步。保持默认选择,到结束。我们发现COM+ Applications里面多了一个MyApp:

然后选择MyApp右键,选择Components。New->component。出现安装组件的向导,选择安装新的组件,定位我们刚才编译好的Dll,知道配置结束。至此,我们Win2k的COM+就配置好了,是不是很烦:)后面调用就简单了。

.NET中调用COM+

新建一个应用程序,加一个datagrid和button。选择项目中添加引用,选择COM,把刚才编译好的DLL加到Project中去,ok,然后就可以调用了。

点击button,加入一下代码

Dim cmd As New OleDbDataAdapter()

Dim g As New COMPlusDemo.Getter()

Dim dst As New DataSet()

cmd.Fill(dst, g.GetProducts(), "Products")

dgdProducts.DataSource = dst

运行,点击Button就可以看到datagrid,中填充了我们检索出来的商品名以及单价:是不是实现了COM+在.NET中的调用?下次将看一下如何反过来调用,从COM使用.NET。(待续)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有