在ASP中调用DLL的方法

在ASP中调用DLL的方法 

.net的dll已经不是严格意义上的动态连接库了,而是一个类或者类库。它是不能直接在ASP、VB等其它的应用环境中使用的。   我们可以通过COM包装器(COM callable wrapper (CCW))来将.net的dll再次包装,通过这个中间介质来实现相应的功能。

以下是一个小例子,供大家参考。
1. 在.net Visual Studio 中新建一个Class项目。
2. 在项目中新添加一个类,代码如下:
using System;
namespace ClassLibrary1
{
  //定义接口,这点很重要 (此接口中的方法与COM组件中的方法一致)
   public interface iClass1
   {
   string  test()  ;
   }

public class Class1 : iClass1
{
  private string t = "";
  //实现接口中的方法
  public string  test() 
  {
   return "ok";
  }
}
}


3.在.NET命令行窗口中,创建密钥对。
  可以用.net 自带的工具:sn.exe 来创建密钥对。
  如:SN –k testDll.Keys 
4. 创建强命名程序集(Strong Name Assembly)
  在AssemblyInfo.cs文件中,添加[assembly: AssemblyKeyFile(@"c:\test.keys")]属性
  
5. 编译整个项目,生成ClassLibrary1.dll (此DLL可在 \bin\Debug 路径下找到。)
6. 在.NET命令行窗口中,生成类型库
   
tlbexp ClassLibrary1.dll /out:ClassLibrary1.tlb


7. 在.NET命令行窗口中,注册装配件
   
regasm /tlb:ClassLibrary1.tlb ClassLibrary1.dll


8. 在.NET命令行窗口中,将.NET装配件安装到全局装配件缓存(GAC)中
   
gacutil /i ClassLibrary1.dll

   
9. 在asp中测试
  <%
  SET s = CreateObject("ClassLibrary1.Class1")
  Response.Write(s.test())
  %>

-----------------------------------------------

动态联接库(DLL)可以加快应用程序关键部分的执行速度,同时通过统一的COM接口调用,对DLL的使用也可以最大限度地发挥组件的重用性。用户不必关心DLL采用什么语言编写,只需关注其提供了哪些功能及接口参数,便可以为我所用。
目前,基于.Net技术编写的DLL组件越来越多,而传统的ASP中如果也可以应用这些组件提供的功能,可以避免很多程序员无谓的劳动。最近本人在工作中需要在ASP中调用.Net环境下生成的DLL,做过一些研究,特将自己的经验共享出来。其实都是很简单的东西,高手尽管嘲笑,呵呵~

1、在ASP中调用传统的ActiveX DLL
要想让COM能够“看到”你的组件,必须先将组件注册到注册表中:
regsvr32 mydll.dll

然后在ASP中创建对象:
set mydll= server.createobject("mydll.method")
mydll.method

这样就可以使用组件中的属性和方法了。

2、在ASP中调用基于.Net开发的 DLL
关于组件注册,一种方法是自动注册,在vs.net2003或2005的IDE环境中可以实现COM组件的自动注册,设置如下:项目名称->右键"属性"->配置属性->生成->选中"为Com Interop注册",编译即可。
另一种方法是手动注册:
regasm mydll.dll /tlb:mydll.tlb /CodeBase

注意CodeBase的使用,如果你要注册的.NET程序集没有强名称的话,那么在使用regasm注册的时候就要加上/CodeBase。
注册完毕,创建对象及使用方法与上面相同:
set mydll= server.createobject("mydll.method")
mydll.method


其实,不只是ASP,其他的COM程序(包括VBA、扩展存储过程等等)调用DLL的方法都是一样的。

有关于regasm的参数,请参考:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfassemblyregistrationtoolregasmexe.asp

首先到这里看代码:   
   http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=35935   

  里面有两个方法   
  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
   
  这个.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解密代码   
  }   
  }   
  }
   
  把上面的文件保存成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("要解密内容","密码")   //   解密

转载于:https://www.cnblogs.com/HappyQQ/archive/2008/04/21/1163301.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值