欢迎大家光临【无师自通-教程网】您的到来是我们的荣幸。本站提供photoshop教程,ps教程,flash教程,cad教程,网页制作教程,excel教程,asp教程,vb教程,3d教程,c语言教程,html教程,coreldraw教程,dreamweaver教程,java教程,3dmax教程 等各种教程为主题的内容和服务,相信您会在这里找到您所需要的东东。无师自通伴您一生-谢谢您的光临!!
网站地图 设为首页
简繁切换 加入收藏
栏目待定 留言本站
您现在的位置: 无师自通-教程网 >> WEB开发 >> ASP.NET教程 >> .NET Framework >> 教程正文

  没有公告

教程: ASP.NET教程-.NET Framework-COM和.NET的互操作 更多...
教程: ASP.NET教程-.NET Framework-COM和.NET的互操作


.NET Framework的产生已经有两年多的时间了,有不少公司开始采用.NET开发应用软件。但是很多公司在多年的项目应用中,开发了很多COM、DCOM组件,现在采用.NET开发组件,使这些组件成为了遗留代码。由于在开发COM组件时投入了大量的人力、财力,如何在.NET环境下重用这些COM组件就显得更有意义,本文将介绍使这些COM组件“起死回生”的方法。

.NET支持运行时通过COM、COM+、本地WinAPI调用与未管制代码的双向互操作性,BCL为此提供了一套类和属性,包括受管制对象生存期的精确控制等。要实现互操作性,必须首先引入.NET Framework的 System.Runtime.InteropServices命名空间。C#的语法为:

using System.Runtime.InteropServices;

而VB.NET的语法为:

import System.Runtime.InteropServices

.NET访问API

.NET允许C#访问未管制的DLL的函数。如要调用Windows User32.dll的MessageBox函数:

int MessageBox(HWND hwnd,LPCTSTR lpText, LPCTSTR lpCaption,UINT uType)

可以声明一个具有DLLImport属性的static extern方法:

using System.Runtime.InteropServices;

[DllImport(“user32.dll”)]

static ertern int MessageBox(int hwnd,string text,string caption,int type);

然后在代码里面直接调用就可以了。这里要注意在调用返回字符串的API中使用StringBuilder对象。

.NET访问COM组件

从.NET调用COM组件比较容易,只要使用tlbimp.exe产生COM的装配形式的WarpClass,然后在.NET项目中调用即可。

注意COM的类型信息通过Type Library文件描述,.NET装配件是自描述的。Tlbimp的作用是从COM组件及其类型信息中产生自描述的装配件。由于VB是进行COM组件开发最简单的语言,所以我们以一个简单的VB COM组件来说明。

1.编写VB组件

VB组件原码(文件名CoAccount.cls)如下:

Private m_Balance As Integer

’组件的私有成员变量

Public Sub Deposit(sum As Integer)

’存钱的方法

m_Balance = m_Balance sum

End Sub

Public Property Get Balance() As Integer

’属性Balance访问成员变量m_Balance

Balance = m_Balance

End Property

将上述代码编译生成CoAccount.dll。

2. 产生.NET可访问的包装类(assembly),使用TlbImp.exe产生.NET装配件。

TlbImp /out:NetAccount.dll CoAccount.dll

3.在.NET代码中访问

.NET代码只需引用CoAccount.dll,就可以像访问.NET的装配件一样访问COM组件。

将.NET组件转化为COM组件

因为.NET装配件开发效率较高,先在.NET环境下开发装配件,然后转化为COM组件,由VB、ASP等调用,可以加快开发进度。下面我们用一个例子简单阐述一下整个过程。步骤如下:

1.定义接口

COM是通过抛出接口让外部应用调用的,每个接口、组件都有一个GUID,在.NET中开发COM组件也不例外。

[Guid(“18E2BCAF-F4B5-4031-8F84-FCFB1DC04877”)] //接口GUID

public interface IAccount

//定义接口IAccount

{ [DispId(1)]

//每个方法或属性都具有DISPID属性,是为了让VBScript等脚本语言调用

void deposit(int num);

//方法,实现存钱的功能

[DispId(2)]

int Balance

//属性,查看当前的账户余额,只读。请注意.NET下属性的定义方法

{ get; }

}

2.实现接口的派生类

[Guid(“9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E”), //组件的GUID

ClassInterface(ClassInterfaceType.None)]

//指明组件的调用方式,支持后期绑定

public class NetAccount:IAccount

//实现接口派生类,注意派生类要实现接口的所有方法。

{ private int balance;

//组件的私有成员变量(在.NET中称为域(FIELD))

public NetAccount()

//构造函数,初始化成员变量

{ balance=10; }

public void deposit(int num)

//实现存钱方法。

{ balance =num; }

public int Balance


[1] [2] 下一页

教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
     
     
     

    asp连接mysql数据库

    asp连接mysql数据库-2

    frontpage2000教程---制作主页
    免责声明!本站资料大部分来自于互联网,其版权归原作者或其他合法者所有.如内容涉及或侵犯了您的权益,请通知本人,我将尽快处理!.欢迎您的光临。
    辽ICP备07003958号
    无师自通,伴你一生-教程网