原来在vs.net 2005中用vb来实现这个功能是如此的简单。
方法如下:
新建一个 项目 ,选择 Visual Basic \ Window \ 类库 ,假设项目名为ClassLibrary1
然后 在 solution manager(解决方案资源管理器)中, 将 新创建的 Class1.vb 文件删除。
然后 在 solution manager(解决方案资源管理器)中 的项目上点击右键 ,在弹出的菜单上 点击 添加 \ 类 ,在弹出的对话框中选择 com类 ,修改类的名称(本例中修改为ComC.vb),后点击 添加 按钮。
则会看到ComC.vb的代码如下:
<ComClass(ComC.ClassId, ComC.InterfaceId, ComC.EventsId)> _
Public Class ComC
COM GUID
' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
End Sub
End Class
Public Class ComC
COM GUID
' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
End Sub
End Class
现在只要在这个类中添加 public 的成员即可 ,假如我们添加一个 方法 Northsnow
<ComClass(ComC.ClassId, ComC.InterfaceId, ComC.EventsId)> _
Public Class ComC
COM GUID
' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
End Sub
Public Sub Northsnow(ByVal ss As String)
MsgBox(ss)
End Sub
End Class
Public Class ComC
COM GUID
' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
End Sub
Public Sub Northsnow(ByVal ss As String)
MsgBox(ss)
End Sub
End Class
然后就可以编译,编译后,在pb中添加如下的代码来调用这个com
int intValue
oleobject objOle
objOle=create OLEObject
intValue=objOle.connecttonewobject("ClassLibrary1.ComC")
objOLe.Northsnow("I am Northsnow")
oleobject objOle
objOle=create OLEObject
intValue=objOle.connecttonewobject("ClassLibrary1.ComC")
objOLe.Northsnow("I am Northsnow")
运行这个程序就会看到效果。
我在C#中没有看到类似的com类.
现在这个棘手的难题解决了之后,工作可以继续了。心理挺高兴的。但是在高兴之余又有一种奇怪的感觉。
VS.net的确的很强。把很多复杂的东西都包装起来帮我们实现。我们在享受轻松的解决难题的时候,距离底层技术却越来越远。不知道是喜是悲。