C# .NET调用易语言DLL中的子程序并获得返回值

这篇博客展示了如何使用C#调用易语言编写的DLL进行文本加密和解密操作。易语言源码包含加密和解密子程序,C#代码通过DllImport调用来实现跨语言交互,注意返回值使用IntPtr以避免二次调用时的异常。博客还提供了代码实现的效果和注意事项。
摘要由CSDN通过智能技术生成

开始

 

知识点2个

1.使用C#来调用易语言写的DLL,调用其他IDE是类似的

2.通过代码解决第二次调用易语言DLL闪退的问题
 

 

易语言源码(DLL,源码中使用了精益模块5.3 自行去论坛下载即可):

.版本 2

.程序集 程序集1

.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码

_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。

.子程序 _临时子程序

' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

.子程序 C_Effectiveness, 文本型, 公开, 加密
.参数 text, 文本型, , 待加密的文本
.参数 passwords, 文本型, , 加密的密码

返回 (文本_加密 (text, passwords))

.子程序 C_decrypt, 文本型, 公开, 解密
.参数 text, 文本型, , 待解密的文本
.参数 passwords, 文本型, , 加密的密码

返回 (文本_解密 (text, passwords))

C#类库源码: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace ConsoleApp1
{
    class Program
    {
        [DllImport("cyuyan.dll")]
        public static extern IntPtr C_Effectiveness(string text, string passwords); //加密 返回值使用IntPtr 而非string 
        [DllImport("cyuyan.dll")]
        public static extern IntPtr C_decrypt(string text, string passwords); //解密 返回值使用IntPtr 而非string 
        static void Main(string[] args)
        {
            var passwords = "asdfa321fsd32f13d2as1f35sd1543a1sdf"; //加密用的密码

            var username = "123456789"; //待加密的文本
            var password = "abcdefg00"; //待加密的文本

            Console.WriteLine("账号:"+ username);
            Console.WriteLine("密码:"+ password);

            var musername = C_Effectiveness(username, passwords); //将加密的账号存入变量
            var mpassword = C_Effectiveness(password, passwords); //将加密的密码存入变量

            Console.WriteLine("账号加密效果:" + Marshal.PtrToStringAnsi(musername));
            Console.WriteLine("密码加密效果:" + Marshal.PtrToStringAnsi(mpassword));

            Console.WriteLine("账号解密效果:" + Marshal.PtrToStringAnsi(C_decrypt(Marshal.PtrToStringAnsi(musername), passwords)));
            Console.WriteLine("密码解密效果:" + Marshal.PtrToStringAnsi(C_decrypt(Marshal.PtrToStringAnsi(mpassword), passwords)));

            Console.WriteLine("按任意键继续...");
            Console.ReadKey();


        }
    }
}

效果:

源码截图(易语言):

源码截图(C#):

 

注意事项:

using System.Runtime.InteropServices;  //加载using
[DllImport("cyuyan.dll")]//加载dll文件
public static extern IntPtr C_Effectiveness(string text, string passwords);//设置公开函数 ,注意 函数中的输入的参数必须为dll中的接受参数名保持一致,否则会报错
[DllImport("cyuyan.dll")]//加载dll文件
public static extern IntPtr C_decrypt(string text, string passwords);//设置公开函数 ,注意 函数中的输入的参数必须为dll中的接受参数名保持一致,否则会报错

返回的的值不要存入文本之类的,需要使用“IntPtr”指针,不然第二次调用dll函数的时候会导致程序异常退出

使用函数 “ Marshal.PtrToStringAnsi(IntPtr值) ” 可获得当前返回的文本

 

结束

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胡巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值