分享易语言DLL取自定义数据数组

2022年7月29日 24点热度 0人点赞

平时用易语言写一些小工具时,可能会用到DLL传递数组,易语言又只支持返回常规类型,这时候我们可以使用该方法来取回原来的数据结构数组。

 

工具/原料

  • 易语言
  • 电脑

方法/步骤

  1. 1

    首先新建一个空的DLL,然后新建一个数据类型如:

    .版本 2

     

     

    .数据类型 数据类型1

     

        .成员 a, 逻辑型

     

        .成员 b, 小数型

     

        .成员 c, 双精度小数型

     

        .成员 d, 长整数型

     

        .成员 e, 整数型

     

        .成员 f, 字节集

     

     

  2. 2

    在新建一个公开的子程序

     

    .版本 2

     

    .支持库 spec

     

     

    .子程序 info, 整数型, 公开

     

    .局部变量 x, 数据类型1, , "0"

     

    .局部变量 a, 数据类型1

     

     

    清除数组 (x)

     

    a.a = 真

     

    a.b = 3.1

     

    a.c = 3.1415926

     

    a.d = 81357707

     

    a.f = { 1, 2, 3 }

     

    加入成员 (x, a)

     

    加入成员 (x, a)

     

    返回 (取变量地址 (x))

     

     

  3. 3

    把新建的写好的DLL编译出来

     

    END

方法/步骤2

  1. 1

    然后在新建一个新的易程序,插入一个新的DLL命令.版本 2

     

     

    .DLL命令 DLL命令1, 整数型, "info.dll", "info"

     

  2. 2

    并把刚才DLL里面的自定义数据复制过来

     

    .版本 2

     

     

    .数据类型 数据类型1

     

        .成员 a, 逻辑型

     

        .成员 b, 小数型

     

        .成员 c, 双精度小数型

     

        .成员 d, 长整数型

     

        .成员 e, 整数型

     

        .成员 f, 字节集

     

     

  3. 3

    然后新建一个子程序,代码如下:

    .版本 2

     

    .支持库 spec

     

     

    .子程序 还原数组, , , 还原自定义数据 数组

     

    .局部变量 变量地址

     

    .局部变量 还原为字节集, 字节集

     

    .局部变量 字节集长度, 字节集

     

    .局部变量 还原数据长度

     

    .局部变量 x, 数据类型1, 静态, "0"

     

    .局部变量 i, 整数型

     

     

    变量地址 = DLL命令1 ()

     

    还原为字节集 = 指针到字节集 (变量地址, 4)

     

    字节集长度 = 指针到字节集 (取变量地址 (还原为字节集 [1]) - 4, 4)

     

    还原数据长度 = 取字节集数据 (字节集长度, 3, 1)

     

    写到内存 (还原为字节集, 取变量地址 (x), 还原数据长度)

     

    .计次循环首 (取数组成员数 (x), i)

     

        调试输出 (x [i].a, x [i].b, x [i].c, x [i].d, x [i].e, x [i].f)

     

     

    .计次循环尾 ()

     

    调试输出 (取数组成员数 (x))

     

     

    END

方法/步骤3

  1. 1

    运行后结果如下:

    END

注意事项

  • 注意DLL内的数组变量一定要构选静态,否则变量将很快被释放掉
  • 还原的调用子程序用于接收数组信息,也一定要勾上静态否则会出错
  • 此方法可能不如汇编指令强大,如果您有更好的方法欢迎交流,共同学习
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论