当前位置:   article > 正文

aardio - 封装dll时,批量设置类的属性和函数__metaproperty aardio

_metaproperty aardio

        在封装dll时,通常会定义一个类,用来定义dll的各种功能。

        如果在类里出现 大量的、模式一样的 属性或函数(方法),如果一个一个去定义,会感觉很累。

        这里介绍一种简单方法,可以批量进行定义。

一、批量定义属性:

        1、先用 ..util.metaProperty() 初始化一下属性表模板,

        2、定义属性“表”,利用循环进行批量设置

        3、如果属性为文本型,定义时在函数前加/标记

        这得益于aardio灵活的属性定义功能和强大的util.metaProperty库

  1. // 定义属性表模板
  2. elistbar._metaProperty = ..util.metaProperty()
  3. // 定义属性名称“表”
  4. var props = { "Visible","Disable","MousePointer","BackColor","RangeStyle",
  5. "/FolderFontName","/ItemFontName","/ImgFileName"}
  6. // 批量进行属性表处理
  7. for(i=1;#props;1){
  8. var isText = ..string.startWith(props[i],"/") // 返回值是否为文本型
  9. var propName = ..string.trimleft(props[i],"/") // 取函数名称
  10. elistbar._metaProperty[propName] = {
  11. _set = function(v){
  12. if isText v = ..string.fromto(v:"");
  13. owner.dll.setProp(owner.tag,propName,v);
  14. };
  15. _get = function(){
  16. var rv = owner.dll.getProp(owner.tag,propName);
  17. if isText rv = ..string.fromto(..raw.tostring(topointer(rv)),0,65001);
  18. return rv;
  19. };
  20. };
  21. }

二、批量定义方法:

        对于一般的dll函数,参数和返回值的类型最常用的为数值型、逻辑型、文本型(字符串),对于自定义结构型,会返回指针(数值型)。

        通常数值型、逻辑型、文本型三个类型就基本能满足需要。

        在类构造函数 ctor 中,可以批量定义dll的函数。

        这得益于aardio强大的不声明直接调用API的功能。

  1. // 批量定义函数
  2. // 返回值通常为数值型、布尔型、null
  3. // 如果返回值为文本型,定义时在函数前加/标记
  4. // 先定义一个函数表
  5. var funcs = {"setChecked","getChecked","setCaret","/getText","/getTitle"}
  6. // 将函数表中的每个函数进行定义
  7. for(i=1;#funcs;1){
  8. var isText = ..string.startWith(funcs[i],"/") // 返回值是否为文本型
  9. var funcName = ..string.trimleft(funcs[i],"/") // 取函数名称
  10. this[funcName] = function(...){
  11. // 构造参数表
  12. var tb = {...}
  13. // 如果dll采用ansi编码,便将参数中的字符串转码一下
  14. for(n=1;#tb;1){
  15. if type(tb[n])=type.string{
  16. tb[n]=..string.fromto(tb[n]);
  17. }
  18. }
  19. // 获取返回值
  20. var rv = this.dll[funcs[i]](this.tag,..table.unpack(tb));
  21. // 如果返回值是文本型,就将其ansi转utf8
  22. if isText rv = ..string.fromto(..raw.tostring(topointer(rv)),0,65001);
  23. return rv;
  24. }
  25. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/50936
推荐阅读
  • 【代码】aardio-调用C编写dll不同参数类型处理方法。aardio-调用C编写dll不同参数类型处理方法importconsole;//生成DLLimporttcc;varc=tcc();c.code=/**#includ... [详细]

  • 1、虚表是一个特殊的listview,一些特性可以通用。2、虚表对大数据比较适合,几百万条数据毫无压力。3、数据量大的情况下(过几十万数据):虚表占用内存非常少,加载速度也非常快。listview占内存非常多,加载速度非常慢。4、数据在内存... [详细]

  • 大名鼎鼎的libxl封装为aardio便于使用aardio-【libxl一个dll操作excel经常用到excel操作也有几个现成的能实现我需要的功能但用起来总是感觉不顺手。于是便在aaz.libxl的基础上按照我的... [详细]

  • Aardio-API调用分析,欢迎各位aardio爱好者交流,共同研究aardio,知对改错,共同进步。_aardio可以数据分析aardio可以数据分析吗注:以下内容仅为本人当前理解,不保证正确,可能随时更新。欢迎各位aardio爱... [详细]

  • 在使用简单画板写古诗词效果过程中,遇到一个问题,就是文本换行时,如果行首为标点符号,会自动将上一行最后一个文字移到这行的标点符号前。这样,上一行末尾就有一个空缺了,不是很美观。当然,这符合语文写作规则^-^我在尝试,是不是有什么设置选项,可... [详细]

  • 利用aardio的plus组件,通过gdip自绘实现漂亮的列表组件效果。以本为基础,通过改造项目模板,可实现各种不同风格的列表组件。_aardioaardio一、前言 编写本的初衷:只需要定义一下需要绘制的内容,就可以做出非常... [详细]

  • 将本次生成dll文件和本次dll依赖dll文件都复制到aardio工程dll文件夹。文章stdcall方式生成.lib和.dll文件,以及工程中.h文件。将vs工程默认cdecl方式改为stdcall方式。其中第一行指定最终生成... [详细]

相关标签
  

闽ICP备14008679号