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

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

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

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

一、批量定义属性:

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

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

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

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

// 定义属性表模板
elistbar._metaProperty = ..util.metaProperty()

// 定义属性名称“表”
var props = {	"Visible","Disable","MousePointer","BackColor","RangeStyle",
			    "/FolderFontName","/ItemFontName","/ImgFileName"}

// 批量进行属性表处理
for(i=1;#props;1){
    var isText = ..string.startWith(props[i],"/")   // 返回值是否为文本型
	var propName = ..string.trimleft(props[i],"/")  // 取函数名称
	elistbar._metaProperty[propName] = {
		_set = function(v){
            if isText v = ..string.fromto(v:"");
            owner.dll.setProp(owner.tag,propName,v);
		};
		_get = function(){
            var rv = owner.dll.getProp(owner.tag,propName);
            if isText rv = ..string.fromto(..raw.tostring(topointer(rv)),0,65001);
            return rv;
		};		
	};		
}

二、批量定义方法:

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

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

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

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

		// 批量定义函数
		// 返回值通常为数值型、布尔型、null
		// 如果返回值为文本型,定义时在函数前加/标记

        // 先定义一个函数表
		var funcs = {"setChecked","getChecked","setCaret","/getText","/getTitle"}

        // 将函数表中的每个函数进行定义
		for(i=1;#funcs;1){
			var isText = ..string.startWith(funcs[i],"/")   // 返回值是否为文本型
			var funcName = ..string.trimleft(funcs[i],"/")  // 取函数名称
			this[funcName] = function(...){
				// 构造参数表
				var tb = {...}
                // 如果dll采用ansi编码,便将参数中的字符串转码一下
				for(n=1;#tb;1){
					if type(tb[n])=type.string{
						tb[n]=..string.fromto(tb[n]);
					}
				}
				// 获取返回值
				var rv = this.dll[funcs[i]](this.tag,..table.unpack(tb)); 
				// 如果返回值是文本型,就将其ansi转utf8
				if isText rv = ..string.fromto(..raw.tostring(topointer(rv)),0,65001);
				return rv; 
			}
		}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卢光庆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值