导读:本文以VB6为例,主要介绍.NET引用COM和COM引用.NET的两个简单示例。
<1>.NET调用COM
为了简单,我们使用VB6,这个据说即将开源的老古董,来制作一个简单的COM。
在VB6中新建一个ActiveX dll工程,只有一个类ComCalc.cls,代码如下:

注意;设置兼容性,并生成dll

然后 ,vs2010中新建一Console项目,微软很奇怪,VB6中的project叫工程,自vs2002起又改名叫“项目”。添加对刚才创建的COM的引用


运行效果:

也许很多人会对这段c#代码很好奇,这个_ComCalc是什么时候产生的?为什么通过它来调用方法,而不是通过类对象?
我们首先看一下,刚才引用COM后,VS IDE为我们做了什么。

请注意,上图中,Interop.SimpleComServer.dll是IDE为我们生成的一个叫“互操作程序集”的东东,而这个东东正是COM和.NET中间的桥梁。
通过对象视图,我们看到_ComCalc正是在这个dll中生成的。我们可以通过OLEView.exe来察看这个Interop.SimpleComServer.dll的Typelib。
如果你已经装全了VB6,你可以在VB目录中找到OLEView.exe,并运行它。如果你没有装全,你可以运行vs2010自带的OLEView.exe,位于
E:/Program Files/Microsoft SDKs/Windows/v7.0A/bin下


找到SimpleComServer,并双击

依据COM规则:COM客户端与COM类进行交互的唯一方式是使用接口引用,而不是对象引用。
如果创建了基于C++的COM客户端,需要特别关注对特定接口的查询过程,如果接口不再被使用,一定要释放它。
如果是VB6创建的客户端,会自动拥有一个默认接口。
现在回到C#代码中来,
<2>COM调用.NET
记住,COM客户端与COM类进行交互的唯一方式是使用接口引用,而不是对象引用。而.NET不需要任何接口。
此时,我们必须确保每个公共成员公开成默认的接口。
我们需要设置[ClassInterface]特性,其属性值可以为以下三个枚举值之一:
AutoDual:
指示自动为类生成双重类接口并向 COM 公开。 为该类接口生成类型信息并在类型库中发布。 由于 ClassInterfaceAttribute 中描述的版本控制方面的限制,极力建议不要使用 AutoDual。
AutoDispatch
:
指示该类只支持 COM 客户端的后期绑定。 在请求时,该类的 dispinterface 将自动向 COM 客户端公开。
Tlbexp.exe(类型库导出程序) 生成的类型库不包含 dispinterface 的类型信息,以防止客户端缓存接口的 DISPID。
由于客户端只能后期绑定到接口,因此 dispinterface 不会出现 ClassInterfaceAttribute 中所述的版本控制问题。
这是 ClassInterfaceAttribute 的默认设置。
None
:指示不为类生成类接口。
如果未显式实现任何接口,则该类将只能通过 IDispatch
接口提供后期绑定访问。
这是 ClassInterfaceAttribute
的推荐设置。
要通过由类显式实现的接口来公开功能,唯一的方法是使用 ClassInterfaceType.None
。
详见MSDN:
(http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.classinterfacetype.aspx
)
新建一vs2010项目。

注意:作为最佳实践,应该将.NET程序部署到GAC。此时,需要一个SNK文件以供签名。如不部署到GAC,则需要复制到与COM应用程序相同的路径下。
我们选择GAC部署


部署成功!
下来我们需要生成必要的COM类库。可以使用tlbexp.exe命令,当然,通过UI界面,也可以。

现在我们再用OLEView.exe来查看

新建一Vb标准exe工程,并添加引用

分享到:
相关推荐
5. 数据绑定与数据源:ASP.NET提供了多种数据绑定机制,如DataSource控件,使得数据展示和操作变得简单。此外,还会讲解如何连接数据库,如SQL Server,以及使用Entity Framework进行对象关系映射。 6. AJAX支持:...
4. **JavaScript交互**: WebKit.NET支持通过`WebKit.WebView.EvaluteScript`方法执行JavaScript代码,与网页中的JavaScript环境进行交互,获取或设置DOM元素的属性,甚至触发JavaScript事件。 5. **事件处理**: ...
标题中的“VB.NET-多功能-滚动字幕”指的是使用Visual Basic .NET(VB.NET)编程语言实现的一种功能丰富的滚动字幕程序。VB.NET是Microsoft .NET框架的一部分,它提供了丰富的库和工具支持,使得开发Windows应用程序...
4. **数据绑定**:讲解如何使用ASP.NET的数据绑定机制,如DataGrid、Repeater等控件,与数据库(如SQL Server)进行交互,展示和操作数据。 5. **状态管理**:在Web环境中,由于其无状态性,状态管理至关重要。教程...
在这个项目中,“VB.NET---计算器---源代码”是一个使用VB.NET编写的简单计算器应用程序。它展示了如何利用VB.NET的基础知识来构建一个交互式的图形用户界面(GUI)应用。 描述中提到,这个计算器是开发者为了解决...
"ASP.NET第一步—基于C#和ASP.NET 2.0---光盘代码"这个文件名暗示了包含的代码示例,这些示例通常涵盖了ASP.NET Web Forms的基本结构、生命周期、事件处理、控件使用、数据访问以及状态管理等方面。 学习ASP.NET,...
6. **部署与IIS集成**:ASP.NET应用通常部署在Internet Information Services (IIS) 上,这是一个强大的Web服务器,能高效地托管ASP.NET应用。部署过程涉及配置Web.config文件、发布项目和设置IIS。 7. **版本管理*...
《ASP.NET3.5入门经典-涵盖C#和VB.NET》以建立一个实际的Web站点为主线,从最初的没有任何功能的简单站点开始,然后逐步增加功能和效果,直到最后建立一个完整的、功能丰富的、数据库驱动的、交互的Web站点。...
6. **窗体和控件**:在VB.NET中,窗体(Form)是应用程序的可视化界面,控件(Control)如Button、TextBox等则在窗体上提供用户交互。 7. **数据类型**:VB.NET提供了多种内置数据类型,如Integer、Double、String...
《ExtJS与.NET结合开发实例》是一份深入探讨如何将前端框架ExtJS与后端技术.NET相结合的应用实践教程。殷良胜和adyhpq作为主要的贡献者,提供了丰富的示例,帮助开发者理解和掌握这两者的集成技巧。 1. **ExtJS简介...
VB6不支持.NET框架的许多高级功能,但可以通过一些方式与.NET应用交互。 C#、VB.NET和VB6之间的通信主要通过以下几种方式实现: 1. COM(Component Object Model)组件:COM是微软提供的一种跨语言的接口标准,...
【ASP.NET课程设计--新闻发布系统】是一个基于VB.NET编程语言开发的应用程序,旨在提供一个功能完善的新闻发布平台。这个系统不仅关注代码的优化,还强调界面的美观性和实用性,为用户提供良好的交互体验。通过该...
9. **ADO.NET与数据库交互**:VB.NET中的ADO.NET库提供了与各种数据库系统交互的能力,包括SQL Server、Oracle和MySQL等。你将学习如何使用Connection、Command、DataAdapter和DataSet等对象进行数据库操作。 10. *...
在实际应用中,小白用户也能快速上手Admin.NET-next,因为项目提供了详尽的文档和示例,指导用户如何配置环境,如何进行前后端的集成,以及如何扩展和定制系统功能。无论是对于个人开发者还是团队协作,这个系统都能...
综上所述,用VB.NET和VC#.NET开发交互式CAD系统涉及图形用户界面设计、图形绘制、用户交互、文件操作、图形库集成以及软件架构设计等多个方面。熟练掌握这些技能,可以构建出高效、易用的CAD应用程序,满足各种工程...
这个压缩包文件包含了一系列VB.NET编程中的常用代码示例,特别关注了数据操作和用户界面交互。以下是对每个文件名称所代表的知识点的详细解释: 1. **04自定义函数ShowData的实现过程.jpg**:这可能是关于如何创建...
.Net 指的是Microsoft的开发平台,通常与C#、VB.NET等语言关联,用于构建服务器端应用。ExtJs则是一个强大的前端JavaScript框架,用于创建富客户端应用,提供丰富的用户界面组件。 **知识详解:** 1. **敏捷开发...
VB.NET可以利用Interop服务与Internet Explorer交互。学习这个实例,你可以了解如何使用VB.NET控制IE浏览器,执行自动化脚本,如自动填写表单、点击链接等。 4. **VB.NET - .NET Framework - Read and Write ...
- 熟悉 C# 或 VB.NET 编程语言。 - 了解 HTML、CSS 和 JavaScript 的基础知识。 #### 下载示例应用 在教程中,您可以下载一个示例应用程序来跟随教程一起学习。这将有助于您更好地理解教程中的概念。 #### 教程...
【VB.Net 2010 与 VB6 的差异与转换】 VB.Net 2010 是 Microsoft .Net Framework 下的一个编程环境,相较于之前的 VB6(Visual Basic 6.0),它引入了许多新特性和改进,旨在提升开发效率和代码质量。VB6 是基于...