betway88电子书籍教程中心网文荟萃客户留言繁體中文
设为首页
加入收藏
联系betway88
您当前的位置:betway88 -> 教程中心 -> 编程经验 -> JAVA DotNet -> 教程内容 退出登录 betway88,
栏目导航
· Visual Basic· Delphi
· Visual C++· C++ Builder
· JAVA DotNet· 其他相关
热门教程
· 如何在Visual Basic...
· 使用Visual Basic操...
· 使用VB6.0设计Activ...
· VB动态调用外部函数...
· 建立一个程序员自己...
· 如何编写高质量的VB...
· [图文] 为更新到Visual Bas...
· 再谈在VB中调用VC++...
· 用VB语言编程实现JP...
· 用DTS实现SQL数据库...
相关教程
· VB.Net创建不规则窗...
· 把握VB.NET中的流(S...
· 把握VB.NET中的流(S...
· 把握VB.NET中的流(S...
· VB.NET中对象的克隆...
· Working with MS Ac...
· VB.net中HOOK的应用...
· VB.net中HOOK的应用...
· Henry手记-VB.net ...
· Henry手记-VB.net ...

VB.NET访问COM+
betway88,作者:佚名 来源: 发布时间:2005-12-29 18:02:37 发布人:admin

减小字体 增大字体


VB.NET访问COM+

摘要

1. 关于COM+

2. VS.NET访问COM+

3.

1.关于COM+

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

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

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

2VS.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 :

系统配置

OSWin2k Advanced Server

DatabaseSQL Server

Develop ToolsVB6 & VS.NET

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

首先创建一个简单的COM+

打开VB6,添加一个Activex Dll,把Class1Name改为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 ServerComponent 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。(待续)


[] [返回上一页] [打 印] [betway sports,]
上一篇教程:用Asp.Net 来发送E-mail
∷相关教程评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图 - 管理登录
Copyright 2020 betway88. All Rights Reserved .
浙ICP备05047688号