转载于:http://developer.51cto.com/art/200909/153811.htm
谢谢:
.NET中的C#编写COM组件进行详细的介绍。包括生成.NET程序集,注册并创建一个程序库
1.Encrypt( string pToEncrypt,string sKey ) //加密 2.Decrypt( string pToDecrypt,string sKey ) //解密 然后你这样写代码:
1.using System; 2.using System.Runtime.InteropServices; 3.namespace 名称空间 4.{ 5. // 首先建立接口,这个是Com必须使用的 6. [Guid( "61BB24CB-4C2C-40f8-9E13-1AC5E558D56A" )] 7. public interface IEncrypt 8. { 9. string Encrypt( string pToEncrypt,string sKey ); 10. string Decrypt( string pToDecrypt,string sKey ); 11. } 12. // 写接口的实现 13. [Guid( "CB52E990-185E-4448-A7E8-C88ECAD563AB" )] 14. public class 类名称 : IEncrypt 15. { 16. public string Encrypt( string pToEncrypt,string sKey ) 17. { 18. // 复制FAQ加密代码 19. } 20. public string Decrypt( string pToDecrypt,string sKey ) 21. { 22. // 复制FAQ解密代码 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的代码复制.
然后你复制这个代码
1.using System; 2.using System.IO; 3.using System.Text; 4.using System.Runtime.InteropServices; 5.using System.Security.Cryptography; 6.namespace Csic 7.{ 8. // 首先建立接口,这个是Com必须使用的 9. [Guid( "61BB24CB-4C2C-40f8-9E13-1AC5E558D56A" )] 10. public interface IEncrypt 11. { 12. string Encrypt( string pToEncrypt,string sKey ); 13. string Decrypt( string pToDecrypt,string sKey ); 14. } 15. // 写接口的实现 16. [Guid( "CB52E990-185E-4448-A7E8-C88ECAD563AB" )] 17. public class Crypt : IEncrypt 18. { 19. public string Encrypt( string pToEncrypt,string sKey ) 20. { 21. // 复制FAQ加密代码 22. } 23. public string Decrypt( string pToDecrypt,string sKey ) 24. { 25. // 复制FAQ解密代码 26. } 27. } 28.} 把上面的文件保存成vs.net项目的一个类库工程.
然后使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示符
在命令行内打下
1.cd c:\ <回车> 2.sn -k myKey.snk<回车> 就在C盘根目录下生成一个名叫myKey.snk的强名称文件,然后关闭提示符窗口.
在vs.net的那个类库工程自动生成的AssemblyInfo.cs文件内把
1.[assembly: AssemblyKeyFile( "" )] 改成
1.[assembly: AssemblyKeyFile( @"C:\myKey.snk" )] 把[assembly: AssemblyVersion( "1.0.*" )]
改成
1.[assembly: AssemblyVersion( "1.0.0.0" )] // 注意:这时你的Com组件版本为1.0.0.0版 然后按Shift + Ctrl + B键生成dll库(使用Release模式),假设是Csic.Crypt.dll.
这时候,程序集就建立成功了.
二、注册该程序集并创建一个类型库
仍然使用开始菜单中的Vistual Studio .Net命令提示符
进入你的项目目录,假设为D:\myProject\bin\Release
在对话框中输入
1.d:<回车> 2.cd myproject\bin\release<回车> 然后输入 dir 命令可以看见Csic.Crypt.dll文件
然后输入:regasm /tlb Csic.Crypt.tlb Csic.Crypt.dll<回车>
然后就在这个目录下生成了Csic.Crypt.tlb类型库文件.不要关闭此提示符窗口.
这时候,这个.dll的.net程序集就变成一个标准的Com组件了,但是还不能用,必须让它变成全局Com组件.
这个regasm 实用程序将创建一个类型库并在 Windows 注册表中对其进行注册,以使 PhysServer2.dll 中的类对 COM 客户端可用 .
三、 将程序集添加到全局程序集缓存中
进入提示符窗口,输入
1.gacutil /I Csic.Crypt.dll<回车> 这时,你的这个dll就被复制到全局程序集缓存中了.也就是说无论在这个电脑的哪个硬盘上都可以使用此dll组件了.
四、C#编写COM组件使用方法
asp内的使用方法
1.set obj = Server.CreateObject( "Csic.Crypt" ) 2.dim str1 3.str1 = obj.Encrypt( "要加密内容","密码" ) // 加密 4.dim str2 5.str2 = obj.Decrypt( "要解密内容","密码" ) // 解密
分享到:
相关推荐
在C#编程中,内存管理是一项关键的概念,虽然程序员通常不需要直接进行内存分配和释放,但理解其工作原理对于编写高效、无泄漏的代码至关重要。本文将深入探讨C#中的内存管理,特别是值类型和引用类型如何在内存中...
### 浅析C# 内存管理 #### 内存管理概述 在现代软件开发过程中,内存管理一直是至关重要的组成部分。对于C#这样的高级编程语言而言,它为开发者提供了自动化的内存管理机制,大大减轻了程序员在内存管理方面的负担...
C# 状态机 Stateless 是一种轻量级的状态机库,能够帮助开发者轻松地创建状态机,实现状态之间的切换。下面是对 C# 状态机 Stateless 的详细介绍。 什么是状态机? 状态机(Finite State Machine)是一种数学模型...
在C#中,委托是一种类型安全的函数指针,可以引用一个或多个方法。它允许我们将方法作为参数传递给其他方法,或者将方法存储为字段。委托类似于函数的引用,能够调用被引用的方法。例如,在给出的小例子中: ```...
在C#中,图形编程是开发用户界面和创建可视化应用的关键部分。C#引入了GDI+(Graphics Device Interface Plus),这是一个比原始的GDI更为强大的图形处理库,旨在简化编程工作并提供更丰富的功能。GDI+允许开发者...
Visual C#,作为.NET框架的一部分,提供了编写和使用DLL的新方式。与传统的Visual C++、Delphi或VB创建的DLL不同,Visual C#生成的DLL是基于.NET Framework的受管代码,即中间语言(IL)代码,而非直接的机器语言。...
在C#编程中,事件处理是一种关键的机制,它允许程序员响应特定的用户交互或系统行为。本文将深入探讨C#中预定义的事件处理机制,以及如何创建和使用自定义事件。 首先,`EventArgs`是所有事件数据类的基类,通常...
C#异步操作是.NET Framework提供的一种编程技术,允许开发者在执行长时间运行的操作时,不会阻塞主线程,从而提高应用程序的响应性。C#异步调用主要依赖于两种异步设计模式:IAsyncResult对象的异步操作和基于事件的...
### 浅析C# 中object sender与EventArgs e #### 一、C# 预定义事件处理机制概览 在深入了解C#中的`object sender`与`EventArgs e`之前,我们首先需要理解.NET框架中与事件相关的类和委托的基础概念。 在C#中,...
理解和熟练运用这些概念对于编写响应用户操作或系统状态变化的代码至关重要。在实际开发中,你可能会遇到各种各样的自定义事件,它们可能携带丰富的数据,这就需要你根据具体需求设计和使用合适的`EventArgs`子类。
在C#编程语言中,文件操作是至关重要的一个部分,它允许程序员读取、写入、创建、删除和管理磁盘上的文件。本篇将深入浅出地探讨C#中的文件操作,帮助开发者理解并掌握相关知识。 首先,C#提供了丰富的类库,如...
C#提供了一整套相当丰富的类库、方法以及事件以供开发者使用。C#还引入了GDI+,它是由GDI演变而来的,具有比GDI更强大的功能而且简化了程序员的编程工作。所以开发者运用这些,就可以很方便的开发出具有强大图形...
"Java组件的浅析" JavaBean是一种软件组件,它是一个Java类,定义了一系列get和set方法。JavaBean是为了简化jsp页面与后台数据的交互过程而产生的。使用JavaBean可以将数据封装在一个Bean对象中,然后将Bean对象...
本文将详细分析C#中的数据类型转换的几种形式。 1. `Convert.ToInt32()`:这是将任意类型转换为32位整数的方法,适用于字符串或其他可转换的类型,例如从浮点数或日期时间转换为整数。 2. `变量.ToString()`:此...
【C# 网络编程网络原理】 网络编程是计算机通信的重要组成部分,尤其在C#开发中,理解网络原理对于创建高效、稳定的网络应用程序至关重要。本文将深入探讨网络原理,帮助开发者为C#网络编程奠定坚实的基础。 1. **...
C#中的WebBrowser控件是一个非常实用的组件,它允许开发者在Windows Forms应用程序中嵌入一个能够浏览网页的控件。这个控件基于Internet Explorer的引擎,因此它可以解析和显示HTML内容,执行JavaScript,并与网页...