VB调用.Net编写的DLL组件示例

COM 可调用包装

COM 客户端不能直接访问 .NET 代码,为了使COM客户端能够调用由.NET编写的代码,需要创建一个称为 COM 可调用包装 (CCW) 的代理。

.NET 公共语言运行时 (CLR) 中运行的代码称为管理代码。它可以访问 CLR 提供的服务,如跨语言集成、安全性和版本控制以及垃圾回收。在 CLR 外运行的代码称为非管理代码。由于在 CLR 出现之前就已经设计出了 COM,而且 COM 代码不在 CLR 提供的基础结构中运行,所以它无法使用 CLR 的任何服务。根据定义,所有 COM 组件都是非管理代码。

解决这个难题的办法是使用代理。通俗的讲,代理是一种接收并修改一个组件的命令、再将这些命令转发给另一个组件的软件。在从非管理代码中调用管理代码的过程中所用到的特殊类型的代理称为 COM 可调用包装,即 CCW

参考文献

创建 COM 可调用类的前提条件

第一,要在 NET代码中明确定义一个接口,并让类实现该接口。

第二,COM 客户端可见的任何类都必须是已声明的公共类。

示例

1 创建.Net程序集

1.                          Public Interface iTemperature
2.                          Property Celsius() As Double
3.                          Property Fahrenheit() As Double
4.                          Function GetCelsius() As Double
5.                          Function GetFahrenheit() As Double
6.                      End Interface
7.                      

 

8.                      Public Class NET_Temperature
9.                          Implements iTemperature
10.                  

 

11.                      Private mdblCelsius As Double
12.                      Private mdblFahrenheit As Double
13.                  

 

14.                      Public Property Celsius() As Double _
15.                       Implements iTemperature.Celsius
16.                          Get
17.                              Celsius = mdblCelsius
18.                          End Get
19.                          Set(ByVal Value As Double)
20.                              mdblCelsius = Value
21.                              mdblFahrenheit = ((Value * 9) / 5) + 32
22.                          End Set
23.                      End Property
24.                  

 

25.                      Public Property Fahrenheit() As Double _
26.                       Implements iTemperature.Fahrenheit
27.                          Get
28.                              Fahrenheit = mdblFahrenheit
29.                          End Get
30.                          Set(ByVal Value As Double)
31.                              mdblFahrenheit = Value
32.                              mdblCelsius = ((Value - 32) * 5) / 9
33.                          End Set
34.                      End Property
35.                  

 

36.                      Public Function GetCelsius() As Double _
37.                       Implements iTemperature.GetCelsius
38.                          GetCelsius = mdblCelsius
39.                      End Function
40.                  

 

41.                      Public Function GetFahrenheit() As Double _
42.                       Implements iTemperature.GetFahrenheit
43.                          GetFahrenheit = mdblFahrenheit
44.                      End Function
45.                  End Class

2创建密钥对并对程序集签名

(1) 打开AssemblyInfo.vb文件,加入以下代码:

1.                      <Assembly: AssemblyTitle("PhysServer2")> 
2.                      <Assembly: AssemblyDescription(".NET Version of PhysServer")> 

(2) 生成密钥对并对程序集进行签名:

    打开:开始-> Microsoft Visual Studio .NET 2003-> Visual Studio .NET工具-> Visual Studio .NET 2003命令提示,输入

    Sn –k [密钥文件名].snk

生成一个密钥文件,然后在AssemblyInfo.vb文件中加入:

<Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyKeyFile(密钥文件)>

重新生成解决方案。

3 注册程序集并生成一个类库

    打开:开始-> Microsoft Visual Studio .NET 2003-> Visual Studio .NET工具-> Visual Studio .NET 2003命令提示,输入:

    regasm /tlb:PhysServer2.tlb PhysServer2.dll

4 将程序集添加到全局程序集缓存中

       打开:开始-> Microsoft Visual Studio .NET 2003-> Visual Studio .NET工具-> Visual Studio .NET 2003命令提示,输入:

    gacutil /I PhysServer2.dll

5编写 Visual Basic 6.0 代码以调用 .NET

点击project -> References(引用)打开 References(引用)对话框。选择对 .NET 版的 PhysServer 的引用,如下图所示。单击 OK(确定)关闭对话框。

填入以下代码进行测试:

Private moTempClass As PhysServer2.NET_Temperature
Private moTemp As PhysServer2.iTemperature

 

Private Sub cmdConvertToC_Click()
    With moTemp
        .Fahrenheit = txtFahrenheit.Text
         txtCelsius.Text = .GetCelsius
    End With
End Sub

 

Private Sub cmdConvertToF_Click()
    With moTemp
        .Celsius = txtCelsius.Text
        txtFahrenheit.Text = .GetFahrenheit
    End With
End Sub

 

Private Sub Form_Load()
    Set moTempClass = New PhysServer2.NET_Temperature
    Set moTemp = moTempClass
End Sub

部署

部署时对于.NET程序集的注册,须注意.NET环境的设置。可参照[Visual Studio .NET主目录]/Common7/Tools/vsvars32.bat来编写一个build文件,自动注册NET程序集。

参考文献

[1] http://www.microsoft.com/china/msdn/archives/library/dndotnet/html/callnetfrcom.asp

[2] http://blog.csdn.net/2066/archive/2004/10/09/129829.aspx

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值