• 在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注册",编译即可。
    另一种方法是手动注册:

    进行命令行:转换当前目录到:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
    输入命令:     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


     

    里面有两个方法
    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程序集: 
     
     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("要解密内容","密码") // 解密

  • 相关阅读:
    集RTMP, HLS, FLV, WebSocket 于一身的网页直播/点播播放器EasyPlayer.js引用videojs无法自动播放问题解决
    HLS播放器RTSP播放器支持8K播放且低延时高并发全功能流媒体播放器EasyPlayer搭建之HTML中 px,em,rem该如何区别?
    网页全终端安防视频流媒体播放器EasyPlayer.js如何实现在web浏览器播放H.265编码视频?
    网页全终端视频流媒体视频直播/点播播放器EasyPlayer.js实现WEB播放H265/HEVC视频方案介绍
    网页全终端视频流媒体播放器EasyPlayer之使用 nginx 和 rtmp 插件搭建视频直播和点播服务器
    车辆实时监控项目中数字摄像头和模拟摄像头的运用、区别及优势分析
    音视频流媒体服务器直播点播平台在车辆实时监控系统中如何做用户观看限制?
    如何借助CDN解决在线教育带宽小、访问大、网点分布不均等问题
    关于区块链,看看诺奖得主是如何评说的!
    区块链也有随机性!
  • 原文地址:https://www.cnblogs.com/weichuo/p/1393136.html
Copyright © 2020-2023  润新知