TC官方合作论坛

 找回密码
 立即注册
查看: 1495|回复: 0

tc。8封装。用函数封装struct。

[复制链接]
发表于 2017-4-6 13:57:47 来自手机 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 剑仙十号 于 2017-5-5 06:54 编辑

tc。8封装。用函数封装struct。
.
先设定C99标准。设定C99标准,有助于tc的健康发展。
1、增加库文件(****.t文件):
右键“项目管理-**项目名字”。 添加,新建文件(N)
文件名: structAPI,位置:  使用默认的。
2、把自定义的结构体/API函数,封装到“structAPI.t”文件。
3、定义部分带0。封装部分带0。
带0的,表示这是形参,是定义部分。
不带0的,表示这是实参,是调用部分。
//
结构体,英文名是struct。
结构体,是类和对象的东西。
.
什么是结构体? 把多种基本的数据类型,封装成复合的数据类型,这就是结构体。
函数,结构体,和类,都属于变量的数据类型的一种。
结构体有什么用处? 调用系统API时,经常要用到结构体。
.
脚本语言,是没有结构体的。tc使用数组构造出来的结构体。
用函数来封装结构体,使代码工整,使代码可读性更强。
在调用该函数时,楼主使用变通的办法:用一个新数组,来接收函数的返回值。这样,封装在函数内的结构体,就被继承过来。
———————————————————————

功能 pt0()//定义结构体。用下一行要封装的数组名,作为函数名。
var pt0 = 数组()//变量的作用域。pt0定义在函数内,是局部数组.
pt0["x"] = 数组("long"=1,"value"=0)
pt0["y"] = 数组("long"=1,"value"=0)
return pt0//返回数组名。
结束
功能 执行()
var pt = pt0()//调用封装函数。用新数组pt,继承结构体数组。
//在调用函数pt0()之后,pt0()的返回值,被新数组pt继承。这样在 执行()中,pt就是继承过来的结构体。
//新结构体pt,就可以作为参数使用了。
结束
———————————————————————
———————————————————————
上面讲解繁多。如果去掉注释,代码量是很简洁的。
功能 pt0()
var pt0 = 数组()
pt0["x"] = 数组("long"=1,"value"=0)
pt0["y"] = 数组("long"=1,"value"=0)
return pt0
结束
功能 执行()
var pt = pt0()//调用封装函数。
//新结构体pt,就可以作为参数使用了。
结束
———————————————————————
———————————————————————


tc。对tc结构体的理解。
在C++中,结构体是一种新的数据类型。尤如tc的整型,浮点型,逻辑型,字符串型,
函数,是变量的数据类型。
结构体,是变量的数据类型。
类也理解为,变量的一种数据类型。
//
//
跟tc官方的信息确认。
var 座标 = array()
座标["x"] = array("long" = 1, "value" = 0)
座标["y"] = array("long" = 1, "value" = 0)
  while(1)
    dllcall("user32.dll", "long", "GetCursorPos", "pstruct", 座标)
    traceprint(座标["x"]["value"])
    traceprint(座标["y"]["value"])
    sleep(1000)
  end
//
"long" = **,是申请long类型的数组空间,用来储值。
"long" = 1,申请一个long类型的内存空间(4字节)?
"long" = 2,申请一个long类型的内存空间(8字节)?
"long" = 3,申请一个long类型的内存空间(12字节)?
"value" = 0,这是 对数组元素的清零/ 赋初值?
//
再问一例子。dllcall实例之气泡演示:
//本示例首先 感谢 鬼玺 同学……
NOTIFYICONDATA["szTip"] = array("wchar"=128,"value"=tip)
NOTIFYICONDATA["dwState"] = array("long"=1,"value"=0)
NOTIFYICONDATA["dwStateMask"] = array("long"=1,"value"=0)
NOTIFYICONDATA["szInfo"] = array("wchar"=256,"value"=content)
NOTIFYICONDATA["uTimeoutAndVersion"] = array("long"=1,"value"=0)
NOTIFYICONDATA["szInfoTitle"] = array("wchar"=64,"value"=title)
NOTIFYICONDATA["dwInfoFlags"] = array("long"=1,"value"=0)
tc帮助文档中讲到,
"wchar"=128,"wchar"=256,"wchar"=64,
在结构体中出现wchar,一般都会被指定缓存长度大小 64字节.128字节.256字节.
这里是否理解为,申请64字节.128字节.256字节大小的内存空间。
//
//
♡い**:  18:51:38
在tc结构体里面,只有char/wchar类型可以申请多数组,其它类型的 都不允许。
像 var 座标 = array()
座标["x"] = array("long" = 100, "value" = 0)
座标["y"] = array("long" = 200, "value" = 0)
.
把long的个数写成100,200,它的内容还是只占四字节。不会占400,800字节。
这个在帮助文档中有说明。
.
♡い**:  18:52:26
座标["y"] = array("char" = 200, "value" = 0)
"char" = 200, 这样写,
则会申请两百个字节空间 除非char以外的类型,都是预留没有做处理。
.
剑仙十号:     18:53:31
谢谢。除了char/ wchar,其它类型 不管标识符的数值,
是填100,200,还是填1000,2000,tc内部申请到的空间,都只是四字节。
//
本贴记录在:tc简单开发吧,精品区8,归类项目。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-30 18:49 , Processed in 0.040867 second(s), 27 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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