51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2417|回复: 1
打印 上一主题 下一主题

[原创] 怎么调用DLL中的方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-6-3 00:06:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么调用DLL中的方法
lr 能不能调用c++写的DLL函数啊
项目中用到了加密的算法 是在程序中是调用一个DLL来实现的 我在lr中能调用这个c++写的dll吗
下面是对这个DLL函数中类说明 我可以直接调用Encrypt这个方法吗 Encrypt是传的一个字符窜 那在c中调用的时候这个字符串怎么传进去

例如

ret=lr_load_dll("Encryption.dll");
   if(ret!=0)
   {lr_message("Encryption.dll erro!");
   }
   else{
         Encrypt();//怎么调用这方法啊
   }


//////////////////////////////////////////////////////////////////
public class EncryptUtil
    {
        /// <summary>
        /// 声明加密的API函数调用
        /// </summary>
        /// <param name="pDataIn">要加密的字符串</param>
        /// <param name="iInputLength">要加密的字符串长度</param>
        /// <param name="pDataOut">加密后的字符串</param>
        /// <param name="iOutputLength">加密后的字符串长度</param>
        /// <returns>加密后的字符串长度</returns>
        [DllImport("Encryption.dll", EntryPoint = "EncryptV1", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        static extern int EncryptV1(Byte[] pDataIn, int iInputLength, Byte[] pDataOut, int iOutputLength);

        /// <summary>
        /// 声明解密的API函数调用
        /// </summary>
        /// <param name="pDataIn">要解密的字符串</param>
        /// <param name="iInputLength">要解密的字符串长度</param>
        /// <param name="pDataOut">解密后的字符串</param>
        /// <param name="iOutputLength">解密后的字符串长度</param>
        /// <returns>解密后的字符串长度</returns>
        [DllImport("Encryption.dll", EntryPoint = "DecryptV1", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        static extern int DecryptV1(Byte[] pDataIn, int iInputLength, Byte[] pDataOut, int iOutputLength);

        /// <summary>
        /// 对传入的字符串进行加密
        /// </summary>
        /// <param name="strInput">输入的字符串</param>
        /// <returns>加密后的字符串</returns>
        public static string Encrypt(string strInput)
        {
            // 取得加密后内容的长度
            Byte[] bytDataIn = System.Text.Encoding.GetEncoding("gb2312").GetBytes(strInput);
            int iDataLength = EncryptV1(bytDataIn, bytDataIn.Length, null, 0);

            // 为存储加密后的内容分配空间
            Byte[] bytDataOut = new Byte[iDataLength];

            // 执行加密
            iDataLength = EncryptV1(bytDataIn, bytDataIn.Length, bytDataOut, iDataLength);
            String strData = System.Text.Encoding.GetEncoding("gb2312").GetString(bytDataOut);

            return strData;
        }

        /// <summary>
        /// 对传入的字符串进行解密
        /// </summary>
        /// <param name="strInput">输入的字符串</param>
        /// <returns>解密后的字符串</returns>
        public static string Decrypt(string strInput)
        {
            // 取得解密后内容的长度
            Byte[] bytDataIn = System.Text.Encoding.GetEncoding("gb2312").GetBytes(strInput);
            int iDataLength = DecryptV1(bytDataIn, bytDataIn.Length, null, 0);

            // 为存储解密后的内容分配空间
            Byte[] bytDataOut = new Byte[iDataLength];

            // 执行解密
            iDataLength = DecryptV1(bytDataIn, bytDataIn.Length, bytDataOut, iDataLength);
            String strData = System.Text.Encoding.GetEncoding("gb2312").GetString(bytDataOut);

            return strData;
        }        
    }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-6-3 08:33:27 | 只看该作者
你可以将函数的算法做成一个DLL,然后对外发布这个算法的接口,通过lr_load_dll函数把DLL加载,然后就可以调用DLL中所发布的接口了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-9 10:43 , Processed in 0.064917 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表