在COM应用中使用.NET组件

首先我们来看看今天的主题和CLR Interop的关系,在我们组里,interop这个术语包含了四个范畴,即P/Invoke, Reverse P/Invoke, COM Interop和Reverse COM Interop。前二个概念通过动态连接库(DLL)在native世界和.NET世界中实现互通性;后两个概念顾名思义,就是和COM打交道了。其中,COM interop是在.NET应用中使用COM组件;Reverse COM Interop指的是在COM应用中使用.NET组件。概念有些绕口令,看官先别急着抛转,看看下图。


可能有人会问, COM技术已经历史悠久了,.NET程序员为什么需要和它打交道呢?问题的答案就在于”组件”一词。举个例子,若干年前一个牛人写了个程序,扩展性极佳,他用了COM把插件的接口定义的明明白白,而我们想用.NET来做这个插件。。。

为COM写一个.NET组件,可以参照以下三部曲

1.定义.NET接口,撰写.NET class

2.部署.NET组件

3.撰写COM客户端

第一步骤对经常从事.NET的开发朋友来说非常熟悉,这里给出例子,不再赘述。

csc /target:library a.cs

第二,要部署.NET组件,这里包括两个方面:

regasm a.dll /tlb

1.把类型库(type library)导出。对于COM应用来说,它只懂得类型库,是为COM组件遵循的二进制”标准”。/tlb选项告诉regasm,导出类型库。我们可以用oleview察看tlb的内容,如下图所示,此前定义的.NET接口和类都在其中。


2.把步骤2中生成的dll放到注册表中。COM并不懂得诸如GAC的概念,而是通过注册表来查询HKEY_CLASSES_ROOT\CLS_ID\00000000-0000-0000-FFFF-000000000004,观察这个注册表项,InprocServer32中把COM的动态链接库指向了mscoree.dll,这就是传说中的垫片(shim),它会负责加载公共语言运行时,并找到真正的.NET组件----a.dll。

时间: 2024-10-03 03:24:38

在COM应用中使用.NET组件的相关文章

在jsp程序中使用com组件

js|程序 在jsp程序中使用com组件的机会并不多,jsp也没有直接操作com的函数,但有的工作有时候还必须使用com组件来完成,下面就来说一下具体的操作方法. 在jsp中使用com组件有两种方法:一种是用javascript在客户端来控制(严格说这个应该是html的功能),如:<OBJECT id="myCom" classid="clsid:9D8A2E2F-D38F-CDAC-D0C5-5B3FB2275442" codebase=".com

在ASP中调用DCOM组件的应用技巧

在ASP中调用DCOM组件的应用技巧 1.编写DCOM组件: 假设我们想通过ASP页面来远程启动DNS服务,并且DNS服务器与Web服务器不为同一台机器.我们可以编写一个ActiveX DLL 来实现这个功能. 首先我们建立一个批处理文件StartDNS.bat,文件中写入:Net Start DNS.将文件保存在DNS服务器的一个目录下,例如C:\ManDNS\: 其次我们编写 Dll 程序如下(VB编写): Public Function StartDNS() As Boolean On E

在jsp中使用smartupload组件上传文件

jsp对上传文件的支持不象php中支持的那么好,直接做成了函数,也不象asp中要通过组件才能实现.jsp 中可以通过javabean来实现.但是我们没有必要自己去写一个上载的bean,在网上已经有了很多成型的技术, smartupload就是其中的一个. 但是smartupload是将文件先读到服务器的内存中,所以上传太大的文件(超过100兆)有可能会出问题, 也算是一个美中不足吧:) 先说一下提交的页面,smartupload组件要求用字节流的方式来提交<FORM action="upl

在NetBeans 4.1中使用Swing组件

我们创建一个名为 ColorSwitcher 的应用程序.它能将面板的颜色从浅灰切换到中灰和黑色. 一.创建新的 ColorSwitcher 应用程序项目: 选择 "文件"--> "新建项目"(Ctrl+Shift+N) .或者,可以单击 IDE 工具栏中的 "新建项目" 图标. 在 "类别" 窗格中,选择 "常规" 文件夹.在 "项目" 窗格中,选择"Java 应用程序

WinForm中的ListBox组件编程

ListBox组件是一个程序设计中经常使用到的组件,在Visual C#和Visual Basic .Net程序中使用这个组件,必须要在程序中导入.Net FrameWork SDK中名称空间System.Windows.Forms,因为在System.Windows.Forms名称空间中定义了这个组件.在ASP.NET的Web页面中,ListBox组件是作为一个服务器端组件的形式出现的,所谓服务器端组件就是这些组件是在服务器端存在的.本文就是来介绍ListBox组件在ASP.NET的Web页面

实现应用程序中的并行组件共享(二)

当将现有组件修改为并行时,正是将它的激活方式改为使用相对路径和隔离全局状态.重要的是给它一个新的 CLSID.ProgId,并且重命名该文件,然后将这个 CLSID.ProgId 以及新文件名用于后来的并行组件.这样做可以避免在并行版本上再注册该组件的非并行版本而引起的冲突.并行组件和他们以前的非并行版本不向后兼容. 状态存储 对于注册表中存储的状态(设置),需要将状态私有化为该应用程序运行的上下文.可以使用 GetModuleFileName() 函数设置一个虚拟根.应对 HKLM 和 HKC

实现应用程序中的并行组件共享(一)

摘要:探讨 Microsoft(R) Windows(R) 2000 和 Windows 98 第二版本中并行共享组件的实现(如 Windows 认证规范中讨论的).包括新的并行组件的创建以及使用 DLL/COM 重定向处理相同组件的不同版本之间的不兼容性.包括编写和安装并行组件以及重新打包和测试应用程序的指南. 目录 介绍 一点背景知识 新组件共享策略 比较两种策略 创建新的并行组件 并行组件编写指南 安装并行组件 DLL/COM 重定向 使用 DLL/COM 重定向 介绍 现代操作系统和应用

Swing中为文本组件定制统一的菜单

在很多软件中每个文本组件都有自定义的菜单,这个blogjava的编辑器就有这样的菜单如:Cut , Copy,Paste,Delete,Select All,在Swing中若也想在JTextField,JTextArea,JEditorPane,JTextPane等等这些组件中都提供如此自定义菜单的功能,每个都写继承类?或者加鼠标监听事件?但不管怎样弄都会实现效果,只不过这样动静很大,不好维护,今天在网上看到一个很是方便的方法. 大家都知道,Swing中所有的事件都是进入java.awt.Eve

Ext中下拉列表ComboBox组件store数据格式用法介绍

本文为大家详细介绍下Ext中下拉列表ComboBox组件store数据格式的基本用法,感兴趣的朋友可以参考下哈,希望对大家有所帮助   复制代码 代码如下: var p_years = new Ext.form.ComboBox( { fieldLabel : '统计年份', anchor : anchor_w, mode : 'remote', maxHeight:100, triggerAction : 'all', selectOnFocus : true, forceSelection