C#寫的程序集註冊成標準的Com組件,在asp中用Server.CreateObject()調用。

C#寫的程序集註冊成標準的Com組件,在asp中用Server.CreateObject()調用。

過程如下:

裏面有兩個方法
Encrypt(string pToEncrypt,string sKey) //加密
Decrypt(string pToDecrypt,string sKey) //解密

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解密代碼
          }
     }
}

然後用vs.net打包成.dll類庫文件,假設名稱爲MyEncrypt.dll
然後用如下工具
regasm MyEnCrypt.dll /tlb:MyEncrypt.tlb  //regasm命令行工具作用就是爲.NET組件生成可以供COM環境調用的類型庫
這個.tlb文件就是類型庫,可以由vb6和vc++6引用。

注意上面的guid是使用vs.net工具菜單裏面的創建guid工具生成的。
還要注意,vs.net自動生成的assemblyinfo.cs文件中必須添加強名稱和版本號,因爲Com組件需要版本號,不要改動版本號,也不要用vs.net自動的1.*這樣的版本號,最好使用
1.1.1.1這樣的固定版本,而且必須一次添加,不能多次添加。


代碼如下

一 生成.net程序集:
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解密代碼
           }
     }
}

把上面的文件保存成vs.net項目的一個類庫工程。
然後使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示符
在命令行內打下
cd c:/ <回車>
sn -k myKey.snk<回車>
就在C盤根目錄下生成一個名叫myKey.snk的強名稱文件,然後關閉提示符窗口。
在vs.net的那個類庫工程自動生成的AssemblyInfo.cs文件內把
[assembly: AssemblyKeyFile("")]
改成
[assembly: AssemblyKeyFile(@"C:/myKey.snk")]
把[assembly: AssemblyVersion("1.0.*")]
改成
[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
在對話框中輸入
d:<回車>
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 客戶端可用 。

三、 將程序集添加到全局程序集緩存中

進入提示符窗口,輸入
gacutil /I Csic.Crypt.dll<回車>
這時,你的這個dll就被複制到全局程序集緩存中了。也就是說無論在這個電腦的哪個硬盤上都可以使用此dll組件了。

四、使用方法
asp內的使用方法
set obj = Server.CreateObject("Csic.Crypt")
dim str1
str1 = obj.Encrypt("要加密內容","密碼") // 加密
dim str2
str2 = obj.Decrypt("要解密內容","密碼") // 解密

注意:上面的這樣的字符串:CB52E990-185E-4448-A7E8-C88ECAD563AB
是使用vs.net“工具”中“創建GUID”自動生成的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章