vb.net封装组件成com的方法
2009-02-23 15:06
330 查看
转自:http://blog.sina.com.cn/s/blog_49d619a301009gik.html~type=v5_one&label=rela_nextarticle
前几天一直在研究如何将.net的组件封装成com供非托管代码调用。上网查资料,查书,试验,最后测试了vb.net,c#,vc++.net 等多种语言,都没有搞定。在论坛上发了帖子。虽然有回复,但是只是给了些资料。资料看了又看,反复的研读。照着例子一步一步地做。但总是有些地方没有成功。正在绝望中。一个朋友给了我简单的答案。我在高兴的同时也感慨自己的愚钝和呆笨。
原来在vs.net 2005中用vb来实现这个功能是如此的简单。
方法如下:
新建一个 项目 ,选择 Visual Basic / Window / 类库 ,假设项目名为ClassLibrary1
然后 在 solution manager(解决方案资源管理器)中, 将 新创建的 Class1.vb 文件删除。
然后 在 solution manager(解决方案资源管理器)中 的项目上点击右键 ,在弹出的菜单上 点击 添加 / 类 ,在弹出的对话框中选择 com类 ,修改类的名称(本例中修改为ComC.vb),后点击 添加 按钮。
则会看到ComC.vb的代码如下:
运行这个程序就会看到效果。
我在C#中没有看到类似的com类.
现在这个棘手的难题解决了之后,工作可以继续了。心理挺高兴的。但是在高兴之余又有一种奇怪的感觉。
VS.net的确的很强。把很多复杂的东西都包装起来帮我们实现。我们在享受轻松的解决难题的时候,距离底层技术却越来越远。不知道是喜是悲。
前几天一直在研究如何将.net的组件封装成com供非托管代码调用。上网查资料,查书,试验,最后测试了vb.net,c#,vc++.net 等多种语言,都没有搞定。在论坛上发了帖子。虽然有回复,但是只是给了些资料。资料看了又看,反复的研读。照着例子一步一步地做。但总是有些地方没有成功。正在绝望中。一个朋友给了我简单的答案。我在高兴的同时也感慨自己的愚钝和呆笨。
原来在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 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 现在只要在这个类中添 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 然后就可以编译,编译后,在pb中添 如下的代 来调用这个com int intValue oleobject objOle objOle=create OLEObject intValue=objOle.connecttonewobject("ClassLibrary1.ComC") objOLe.Northsnow("I am Northsnow")
运行这个程序就会看到效果。
我在C#中没有看到类似的com类.
现在这个棘手的难题解决了之后,工作可以继续了。心理挺高兴的。但是在高兴之余又有一种奇怪的感觉。
VS.net的确的很强。把很多复杂的东西都包装起来帮我们实现。我们在享受轻松的解决难题的时候,距离底层技术却越来越远。不知道是喜是悲。
相关文章推荐
- vb.net 封装组件成com的方法
- vb.net 封装 组件 成 com的方法
- vb.net 封装 组件 成 com的方法
- vb.net封装组件成com的方法
- 使用VB.net和VB编写DLL组件的方法
- VB.NET自定义组件方法及注意事项
- ASP.NET中常用的26个优化性能方法---将调用密集型的 COM 组件迁移到托管代码
- [转-来自啊泰]可逆加密,支持中文,支持密钥,加密后的密文每次都不同,且可随意改变算法 组件之Vb.Net版本 [http://www.cnblogs.com/babyt/archive/2005/04/13/136613.html]
- [VB.NET]问下 :自己写的com,其中一个接口方法返回一个variant类型的值,在.net中如何接收啊
- VB.net开发的com手动注册的方法
- .NET+COM+组件注册方法
- 使用Geoprocessor导出ArcSde中的数据,对COM 组件的调用返回了错误 HRESULT E_FAIL 的解决方法
- VB.NET中treeview使用方法一
- VB.Net日期格式化的5种使用方法
- VB.Net替换全角单双引号的方法
- C#.NET 通用权限管理系统组件 大数据多表分页获取部分列的参考方法
- 在c#.net通用权限管理系统组件里的 部门经理,分管副总 的管理方法参考
- VB.net 如何复制datatable中的row到另一个datatable中.两种方法
- extjs6 基础组件扩展和自定义组件封装--03全局方法、变量介绍
- VB.NET中将结构体保存到文件的方法