.net基础-COM与.NET交互

7、深入探索 .NET 与 COM 组件的交互:从基础到高级应用 本文深入探讨了在.NET框架中使用COM组件的技术与方法,从基础的环境配置到高级应用。内容涵盖非托管代码与托管代码的对比、类型库导入器的使用、主互操作程序集的作用、互操作封送处理、与COM对象的常见交互方式,以及ActiveX控件的集成。通过具体示例,如使用Microsoft Speech API实现语音输出和利用Microsoft Word检查拼写,展示了实际开发中的应用技巧。适合希望在.NET应用中充分利用现有COM组件功能的开发者阅读。 阅读详情

http://www.51edu.com/it/chengxu/.net/.netjichu/2768153.html

 

精品学习网考试频道小编应广大考生的需要,特为参加考试的考生策划了“.net基础-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#代码中来,

_ComCalc itfComInterface = null;//定义COM接口ComCalcClass comObj = new ComCalcClass();//定义COM类itfComInterface = (_ComCalc)comObj;//转换为对COM接口的引用Console.WriteLine("COM server says 10 + 832 is {0}",itfComInterface.Add(10, 832));//调用COM接口的方法

<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工程,并添加引用

 

邀月工作室

 

 

邀月工作室

 

 

邀月工作室

更多内容进入:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

COM和套间(Apartments) 1 - 基本知识 http://blog.csdn.net/ATField/archive/2007/10/14/1824640.aspxOverviewCOM技术过时了吗?这句话也对也不对。从技术上讲,确实COM的使用率在下降,但是从思想上来说,COM的面向接口的思想正在被Java和.NET发扬光大。那我们还需要和COM打交道吗?这取决于你工作的领域。虽然现在微软的平台在慢慢向着.NET迁移,不过,在 阅读详情

相关推荐

4、VB.NET与HTML在Web应用中的深度解析

本文深入解析了VB.NET和HTML在Web应用开发中的角色与优势。内容涵盖VB.NET与.NET及COM+对象的交互、Web服务(SOAP)与DCOM的对比、基于WebForms的瘦客户端开发,以及WinForms富客户端应用程序的特点。同时,文章分析了HTML的基础知识、作用、重要性及其局限性,并通过综合实践展示了如何结合VB.NET与HTML构建高效的Web应用。最后展望了未来Web开发的技术融合、性能优化、安全增强及跨平台发展趋势。

dapp9builder的博客 84

.NET进阶篇07-.NET和COM

知识需要不断积累、总结和沉淀,思考和写作是成长的催化剂 文章目录一、COM和.NET元数据内存管理接口注册线程编组二、.NET客户端调用COM组件三、COM客户端调用.NET组件四、嵌入互操作类型五、平台调用DllImport六、等等 一、COM和.NET COM组件对象模型是在.NET之前的一种编程规范,它允许不同的语言之间可以互相操作。由于COM规范比较复杂,注册表,内存对象管理,错误处理...

u012818292的博客 477

8、.NET 技术全面解析:特性、架构与安全策略

.NET 技术全面解析,涵盖其基础概念、架构设计、安全策略及实际应用。博文深入探讨了 .NET 与 COM 的交互、多平台开发潜力、组件统一性、Web 服务优势,并详细分析了 .NET 的分层架构、构建领域以及安全机制如基于证据和角色的安全模型、身份验证授权、隔离存储和加密技术。同时,结合电商、移动应用等实际案例,展示了 .NET 在身份验证、数据存储和加密传输中的应用,并展望了 .NET 技术在多平台支持、云计算、人工智能和安全性能方面的未来发展趋势。

v4w5x6的博客 103

1、COM组件与.Net组件的比较

1、COM组件与.Net组件的比较       COM技术要早于.Net技术。COM定义了一个组件模型,在该模型中,组件可以使用不同的编程语言进行编写,其可以在本地进程中使用,也可以跨进程使用或者在网络上使用。.Net组件的目标也是这样,但这些目标的实现方式是不同于COM的实现方式的。.Net组件达到了与COM类似的目标,但是它引入了新概念,实现起来也更容易了。就目前而言,COM组件与.Ne

旅途 1411

55、PowerShell编程:从基础到高级应用

本文深入介绍了 PowerShell 编程的多个核心主题,涵盖从基础循环控制(如 break 和 continue 语句)到高级功能(如与 .NET 框架和 COM 对象交互、创建类型实例、扩展对象功能)的全面内容。同时,详细讲解了如何编写脚本、函数和脚本块,以及命令执行和参数处理的最佳实践。通过丰富示例和流程图,帮助开发者和系统管理员高效掌握 PowerShell 的强大功能,提升自动化脚本开发与系统管理能力。

y4z5a6b7的博客 82

COM技术进阶三部曲:从基础到实践再到高级特性

COM(Component Object Model)组件技术是微软提出的一种用于软件组件之间通信的二进制标准。自1993年首次引入以来,COM已成为Windows操作系统下软件开发的核心机制之一。它不仅仅是一个接口定义语言或API集,而是一个规范,定义了如何在不同组件之间进行交互,使得软件组件能够跨进程、跨语言甚至跨平台工作。在COM组件中定义和实现接口是整个组件通信机制的核心部分。接口定义需要满足以下要点:唯一标识每个接口都必须有一个全局唯一的标识符(GUID)。

weixin_35749786的博客 963

在C#中调用托管和非托管代码的问题

  C#中使用非托管指针* 值针可以在带有unsafe的函数中正常使用。必须在函数前,static关键字后加入unsafe关键字。如static unsafe void Main(string[] args){}在项目属性中,选中Allow unsafe code复选框。C#中使用托管跟踪句柄^ 跟踪句柄可以直接赋值到C#对象中。

刘卓的专栏 2616

.NET窗体之间的交互

本文介绍了.NET窗体之间的交互办法。.NET为你提供了两条出路:把窗体实例指针保存在全局变量中;把窗体实例指针传递给任何需要访问它的窗体、类、模块或者过程。

COM和.NET的互用性

作者: BUILDER.COMTuesday, January 14 2003 1:08 PM   .NET平台是来自早期COM的一个主要技术转换,COM已经统治微软世界好多年了。尽管现在可以使用.NET进行新的开发,但是仍然需要使用一些现有的以COM组

tanliyoung的专栏 1020

通达信烽火起爆指标公式

STICKLINE(IF(起爆666,-120,0),+33,0,3.4,0),COLOR007777;STICKLINE(IF(起爆666,-120,0),+33,0,1.8,0),COLOR009999;STICKLINE(IF(起爆666,-120,0),+33,0,1.2,0),COLOR00BBBB;STICKLINE(IF(起爆666,-120,0),+33,0,0.6,0),COLOR00DDDD;STICKLINE(起爆666,0,100,9999,0)*起爆,COLOR000000;

zhibiaogong的博客 3888

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法

本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。

qq_43011586的博客 3685

C++调用C#的COM

Preface COM Interoperability is the feature of Microsoft .NET that allows managed .NET code to interact with unmanaged code using Microsoft's Component Object Model semantics. This article is gea

flame99999的专栏 687

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7256

C++与.NET中基础类型的对应及转化

C++与.NET中基础类型的对应及转化 前言:为了介绍C#写界面,C++写算法的快捷交互开发方式,首先介绍c++,C#内部的DLL,COM调用. 一,基础类型 二,字符类型 /*** Author - Nishant Sivakumar Copyright(C) - Nishant Sivakumar 2005 ***/ #pragma 

jfkidear的专栏 950

双屏DPI缩放问题全解析:从原理到实战解决窗口大小突变

DPI(每英寸点数)缩放是现代操作系统在多显示器环境下实现界面适配的核心技术。其原理是通过虚拟分辨率映射,在不同物理像素密度的屏幕上维持一致的视觉尺寸。这项技术的价值在于解决了高分辨率屏幕显示内容过小的问题,保障了跨屏工作流的视觉连续性。然而,在混合DPI环境(如4K屏与1080p屏组合)中,显卡驱动逻辑与应用程序DPI感知的协同问题,常导致窗口跨屏时出现剧烈缩放、尺寸错乱。这直接影响多屏办公、设计协作等需要频繁拖拽窗口的应用场景。本文聚焦于**显卡驱动**配置与**应用程序兼容性**设置,提供一套从系统底

weixin_34364071的博客 386

如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境

在云端环境编写 ABAP 代码会遇到一些限制,比如你无法在云端 ABAP 编程环境进行发生在传统 SAPGUI 里的 Dynpro 和 Screen 编程。部分在 SAPGUI 里使用的 List 处理相关的关键字比如 WRITE,还有 CALL TRANSACTION 等代码,也无法在云端使用。 当然如果大家觉得上面提到的这些限制不会影响自己的 ABAP 学习,就可以继续本文的阅读,使用 ABAP Development Tool 登录云端的 ABAP 编程环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1518

跨入COM世界的第一步

        我们都知道.NET被称为更好的COM,而OLE、ActiveX等技术是以COM为基础的,大名鼎鼎的DirectX也大量使用了COM。尽管.NET战略让COM的地位日益下降,我们还是需要将足够的注意力放到COM的上面。由于工作的需要,我要开始关注DirectX的内容了,而COM又是基础,了解COM就成了首要的任务。        以前觉得COM很神秘,只是知道一些基本的概念:COM是...

weixin_34321753的博客 87

matlab 质心重合法实现点云配准【2026最新版】

质心重合法是将源点云和目标点云的质心重合,以此缩小两点云集之间的平移误差,从而为下一步粗配准提供更好的初始位置姿态。

点云侠的博客 509

J2ee与ASP.NET平台电子企业的两种构想(4)

 J2EE体系结构与.NET平台相比,Sun公司的标准定义的J2EE体系结构有很少可以讨论的空间,因为就没有什么可讨论的。如果一个人注意某个具体开发商的产品,如IBM公司的WebSphere,那么就会看到其技术的最大的一部分是WebSphere专用的。比较所有开发商对J2EE的具体改进,已经超出了本文的范围,在我的经验中,大多数对J2EE作为一个平台感兴趣的公司对该标准的可移值性感兴趣。任

netyfhome的专栏 1000

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息

本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。其中MobileViT块旨在以较少的参数对输入张量中的进行建模,结合卷积与 Transformer 的优势,并实现有效的信息编码与融合本文配置了原论文中和三种模型,以满足不同的需求。

Limiiiing的博客 1074

YOLOv5入门实践(2)——手把手教你利用labelimg标注数据集

YOLOv5入门实践第2步,手把手教你使用labelimg标注数据集

路人贾的博客 1万+

3个神奇技巧:让AutoHotkey脚本轻松操控.NET组件

AutoHotkey是一款面向Windows的宏创建和自动化脚本工具,通过简单的脚本编写,用户可以实现各种自动化任务。本文将分享3个实用技巧,帮助你轻松使用AutoHotkey操控.NET组件,提升脚本功能和效率。 ## 技巧一:利用DllCall实现基础交互 AutoHotkey通过`DllCall`函数可以直接调用动态链接库中的函数,这是与.NET组件交互的基础方式。在项目源码中,`sou

gitblog_00689的博客 356

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

寻找 vb.net 事务处理高级编程 的代码!!

寻求这本书的源代码:vb.net 事务处理高级编程PROFESSIONAL Visual Basic .NET Transactions Written and tested for final release of .NET v1.0 Matthew Bortniker James Conard 袁勤勇 何欣 郑巍 清华大学出版社 是wrox的红皮书。主要讲述AD0.NET,...

dianhuanzi3763的博客 146

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

不可错过的MSDN TV —— IronPython: Python on the .NET Framework (上)(转)

转From:http://perhaps.cnblogs.com/archive/2005/12/27/305253.html今天我们主要对MSDN TV上的一个视频节目——IronPython: Python on the .NET Framework做一些讨论。这个视频早在11月10日就发布出来了(不得不再次BS一下自己的懒惰),而做秀者正是大名鼎鼎的IronPython之父——Jim Hug

hyde82的专栏 1724

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

.NET 面试题+答案(1)

. SQL部分:   问:聚集索引和非聚集索引区别:   答:正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。          目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”  问:索引有什么意义?简单解释簇索引(clustered),及其优缺点答:聚集索引通常可加快 UPDATE 和 DELETE 操作的速度,因为这两个操作需要读取大量的数据。创建或

caomingcaoming的专栏 1163
上一篇: COM组件中使用用户自定义数据类型
下一篇: C++ 将数据写入二进制文件后,第二次打开文件修改部分数据,怎么前一次写入的数据被删除了。
chulia
博客等级 码龄23年 50粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值