浅析C#编写COM组件的几种方法

开发 后端
这里我们将介绍.NET中的C#编写COM组件的几种方法,希望通过本文能对大家了解COM组件有所帮助。

我们将介绍C#编写COM组件的几种方法,并通过代码讲解的相识,对.NET中的C#编写COM组件进行详细的介绍。包括生成.NET程序集,注册并创建一个程序库等等。

Encrypt( string pToEncrypt,string sKey ) //加密  
Decrypt( string pToDecrypt,string sKey ) //解密 
  • 1.
  • 2.

然后你这样写代码:

using System;  
using System.Runtime.InteropServices;  
namespace 名称空间  
{  
    // 首先建立接口,这个是Com必须使用的  
    [Guid( "61BB24CB-4C2C-40f8-9E13-1AC5E558D56A" )]  
    public interface IEncrypt  
    {  
        string Encrypt( string pToEncrypt,string sKey );  
        string Decrypt( string pToDecrypt,string sKey );  
    }  
    // 写接口的实现  
    [Guid( "CB52E990-185E-4448-A7E8-C88ECAD563AB" )]  
    public class 类名称 : IEncrypt  
    {  
        public string Encrypt( string pToEncrypt,string sKey )  
        {  
            // 复制FAQ加密代码  
        }  
        public string Decrypt( string pToDecrypt,string sKey )  
        {  
            // 复制FAQ解密代码  
        }  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

然后用vs.net打包成.dll类库文件,假设名称为MyEncrypt.dll

然后用如下工具

regasm MyEnCrypt.dll /tlb:MyEncrypt.tlb

这个.tlb文件就是类型库,可以由vb6和vc++6引用.

注意上面的guid是使用vs.net工具菜单里面的创建guid工具生成的.

还要注意,vs.net自动生成的assemblyinfo.cs文件中必须添加强名称和版本号,因为Com组件需要版本号,不要改动版本号,也不要用vs.net自动的1.*这样的版本号,最好使用

1.1.1.1这样的固定版本,而且必须一次添加,不能多次添加.

步骤

一 生成.net程序集:

首先你把http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=35935的代码复制.

然后你复制这个代码

using System;  
using System.IO;  
using System.Text;  
using System.Runtime.InteropServices;  
using System.Security.Cryptography;   
namespace Csic  
{  
    // 首先建立接口,这个是Com必须使用的  
    [Guid( "61BB24CB-4C2C-40f8-9E13-1AC5E558D56A" )]  
    public interface IEncrypt  
    {  
        string Encrypt( string pToEncrypt,string sKey );  
        string Decrypt( string pToDecrypt,string sKey );  
    }  
    // 写接口的实现  
    [Guid( "CB52E990-185E-4448-A7E8-C88ECAD563AB" )]  
    public class Crypt : IEncrypt  
    {  
        public string Encrypt( string pToEncrypt,string sKey )  
        {  
            // 复制FAQ加密代码  
        }  
        public string Decrypt( string pToDecrypt,string sKey )  
        {  
            // 复制FAQ解密代码  
        }  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

把上面的文件保存成vs.net项目的一个类库工程.

然后使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示符

在命令行内打下

cd c:\ <回车> 
sn -k myKey.snk<回车> 
  • 1.
  • 2.

就在C盘根目录下生成一个名叫myKey.snk的强名称文件,然后关闭提示符窗口.

在vs.net的那个类库工程自动生成的AssemblyInfo.cs文件内把

[assembly: AssemblyKeyFile( "" )]  
  • 1.

改成

[assembly: AssemblyKeyFile( @"C:\myKey.snk" )]  
  • 1.

把[assembly: AssemblyVersion( "1.0.*" )]

改成

[assembly: AssemblyVersion( "1.0.0.0" )] // 注意:这时你的Com组件版本为1.0.0.0版  
  • 1.

然后按Shift + Ctrl + B键生成dll库(使用Release模式),假设是Csic.Crypt.dll.

这时候,程序集就建立成功了.

二、注册该程序集并创建一个类型库

仍然使用开始菜单中的Vistual Studio .Net命令提示符

进入你的项目目录,假设为D:\myProject\bin\Release

在对话框中输入

d:<回车> 
cd myproject\bin\release<回车> 
  • 1.
  • 2.

然后输入 dir 命令可以看见Csic.Crypt.dll文件

然后输入:regasm /tlb Csic.Crypt.tlb Csic.Crypt.dll<回车>

然后就在这个目录下生成了Csic.Crypt.tlb类型库文件.不要关闭此提示符窗口.

这时候,这个.dll的.net程序集就变成一个标准的Com组件了,但是还不能用,必须让它变成全局Com组件.

这个regasm 实用程序将创建一个类型库并在 Windows 注册表中对其进行注册,以使 PhysServer2.dll 中的类对 COM 客户端可用 .

三、 将程序集添加到全局程序集缓存中

进入提示符窗口,输入

gacutil /I Csic.Crypt.dll<回车>  
  • 1.

这时,你的这个dll就被复制到全局程序集缓存中了.也就是说无论在这个电脑的哪个硬盘上都可以使用此dll组件了.

四、C#编写COM组件使用方法

asp内的使用方法

set obj = Server.CreateObject( "Csic.Crypt" )  
dim str1  
str1 = obj.Encrypt( "要加密内容","密码" ) // 加密  
dim str2  
str2 = obj.Decrypt( "要解密内容","密码" ) // 解密 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

【编辑推荐】

  1. C#数组基础介绍与操作详解
  2. C#数组操作详细剖析
  3. 浅析C#数组初始化性能测试
  4. C#数组和串操作经验总结
  5. C#数组初始化全面分析
责任编辑:彭凡 来源: upschool.com.cn
相关推荐

2009-09-18 19:09:41

C# COM组件

2009-08-03 11:37:36

C#日期时间控件

2009-09-17 16:55:58

C#组件设计

2009-08-31 09:19:31

c#隐藏窗口

2013-02-22 09:54:15

C#Excel读取Excel

2009-09-01 18:35:53

C#判断文件存在

2009-08-12 18:04:44

编写C#多线程

2009-08-21 09:14:47

C# Excel CO

2009-09-02 16:43:55

C#调用Excel的C

2009-08-28 15:05:35

C#编写Calenda

2009-08-06 16:58:40

C#编写ActiveX

2009-08-18 16:31:19

Visual C#编写

2009-08-20 11:03:34

Visual C#使用

2009-08-14 09:43:59

C#复制构造函数

2011-07-20 16:23:14

C++

2009-08-19 14:35:12

C++和C#相互调用C

2009-09-11 09:10:30

C#编写游戏

2009-09-11 09:15:06

C# get方法

2009-09-24 15:10:54

C#调用COM组件

2009-08-14 10:35:25

C#最小化编写
点赞
收藏

51CTO技术栈公众号