VB.NET的应用到底能帮助我们带来些什么呢?只有在实际应用中才能真正的体会到它强大的功能。下面就先从VB.NET组件封装来看看它的一些主要作用。从这个角度来仔细的分析一下这款编程语言的优点。#t#
前几天一直在研究如何将VB.NET组件封装之后可以实现com供非托管代码调用。上网查资料,查书,试验,***测试了vb.net,c#,vc++.net 等多种语言,都没有搞定。在论坛上发了帖子。虽然有回复,但是只是给了些资料。资料看了又看,反复的研读。照着例子一步一步地做。但总是有些地方没有成功。正在绝望中。一个朋友给了我简单的答案。我在高兴的同时也感慨自己的愚钝和呆笨。
原来在vs.net 2005中实现VB.NET组件封装是如此的简单。
方法如下:
新建一个项目,选择Visual Basic \ Window \ 类库,假设项目名为ClassLibrary1
然后 在solution manager(解决方案资源管理器)中,将新创建的Class1.vb文件删除。
然后在solution manager(解决方案资源管理器)中的项目上点击右键,在弹出的菜单上点击添加 \ 类,在弹出的对话框中选择com类,修改类的名称(本例中修改为ComC.vb),后点击添加按钮。
则会看到ComC.vb的代码如下:
< ComClass(ComC.ClassId,
ComC.InterfaceId, ComC.EventsId)>
_ Public Class ComCClass ComC
COM GUID#Region "COM GUID"
' 这些 GUID 提供此类的 COM 标识
' 及其 COM 接口。若更改它们,则现有的
' 客户端将不再能访问此类。
Public Const ClassId As String =
"97451265-d75d-4d5a-a39d-6c4b68f8dd99"
Public Const InterfaceId As String =
"5015b9e7-64e6-4750-8c28-5c51d968f1d6"
Public Const EventsId As String =
"1afd03f4-5974-445e-8ca2-a8e9be3432d7"
#End Region
' 可创建的 COM 类必须具有一个不带参数的
Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()Sub New()
MyBase.New()
End Sub
End Class
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
现在只要在这个类中添加public 的成员即可,假如我们添加一个方法Northsnow
< ComClass(ComC.ClassId,
ComC.InterfaceId, ComC.EventsId)>
_ Public Class ComCClass ComC
COM GUID#Region "COM GUID"
' 这些 GUID 提供此类的 COM 标识
' 及其 COM 接口。若更改它们,则现有的
' 客户端将不再能访问此类。
Public Const ClassId As String =
"97451265-d75d-4d5a-a39d-6c4b68f8dd99"
Public Const InterfaceId As String =
"5015b9e7-64e6-4750-8c28-5c51d968f1d6"
Public Const EventsId As String =
"1afd03f4-5974-445e-8ca2-a8e9be3432d7"
#End Region
' 可创建的 COM 类必须具有一个不带参数的
Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()Sub New()
MyBase.New()
End Sub
Public Sub Northsnow()Sub
Northsnow(ByVal ss As String) MsgBox(ss)
End Sub
End Class
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
然后就可以编译,编译后,在pb中添加如下的代码来调用这个com
int intValue
oleobject objOle
objOle=create OLEObject
intValue=objOle.
connecttonewobject
("ClassLibrary1.ComC")
objOLe.Northsnow
("I am Northsnow")
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
运行这个VB.NET组件封装的实现程序就会看到效果。
我在C#中没有看到类似的com类.
现在这个棘手的难题解决了之后,工作可以继续了。心理挺高兴的。但是在高兴之余又有一种奇怪的感觉。
VB.NET的确的很强。把很多复杂的东西都包装起来帮我们实现。我们在享受轻松的解决难题的时候,距离底层技术却越来越远。不知道是喜是悲。