网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月23日漏签0天
tc简单开发吧 关注:3,055贴子:11,429
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1回复贴,共1页
<<返回tc简单开发吧
>0< 加载中...

8封装。用函数封装 系统api

  • 只看楼主
  • 收藏

  • 回复
  • 剑仙十号
  • tc金仙
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
8封装。用函数封装 系统api
先设定C99标准。
设定标准,有助于tc健康发展。
1、增加库文件(****.t文件):
右键“项目管理-**项目名字”。 添加,新建文件(N)
文件名: structAPI,位置: 使用默认的。
2、把自定义的结构体/API函数,封装到“structAPI.t”文件。
3、定义部分带0。封装部分带0。
带0的,表示这是形参,是定义部分。
不带0的,表示这是实参,是调用部分。
//
C++中调用系统API,可以直接写/直接调,简直和调用C内建api一样简单。
但在aj,tc,e中调用系统API,都得先定义,先声明,麻烦多多的。
把常用系统API/ 常用API结构体,封装到“structAPI库.t”。
当某项目 使用到某个API时,在项目中新建一个“structAPI.t”,
再在“structAPI库.t” 中搜索该API名字,复制到“structAPI.t”使用。这样就省力多了。平时多积累,用时少费心。易api伴侣也是这样操作。
//
重用性强。编程就有这种好处,
来来去去的,都是这些东西。一次编写,多次调用,这不是吹牛的。
=======================================================
封装,不带传址参数的api。
这是比较简单的。
api带几个参数,函数就定义几个参数。
api带返回值,就用return返回数值。
照单拾药,照本宣科就行。
//
封装带有传址参数的api。
用函数封装,带有传址参数的api,形参必须带上&。
什么是形参,什么是实参?参考教程:
第三法,函数的定义。形参和实参。
第三法,函数的定义。引用传参的学习。
.
例子:GetCursorPos,VB声明:
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
说明:获取鼠标指针的当前位置返回值Long,非零表示成功,零表示失败。
会设置GetLastError参数表,参数类型,及说明lpPointPOINTAPI,随同指针在屏幕像素坐标中的位置载入的一个结构。
在VB中,
ByVal 代表普通传参,是传值的。
ByRef 代表引用传参,是传址的。
VB默认是传址的,省略标识ByVal,都默认为传址。Ip也代表传址。
.
VC声明
Api 函数功能:该函数检取光标的位置,以屏幕坐标表示。函数原型:BOOL GetCursorPos(LPPOlNT IpPoint)。参数:IpPint:POINT结构指针,该结构接收光标的屏幕坐标。
Ip是代表传址。
———————————————————————
———————————————————————
执行部分:
功能 执行()
var pt = pt0()//用新数组pt,继承结构体。
GetCursorPos(pt)
messagebox(pt["x"]["value"]&","& pt["y"]["value"])
结束
//
定义部分。封装部分。
功能 pt0()//定义结构体。使用下一行要封装的数组名,作为函数名。
var pt0 = 数组()
pt0["x"] = 数组("long"=1,"value"=0)
pt0["y"] = 数组("long"=1,"value"=0)
return pt0
结束
功能 GetCursorPos(&pt0)//定义api。把下一行要封装的api名,作为函数名。
//封装带传址参数,形参必须带上&,&pt0。
var ret0=dllcall("user32.dll","long","GetCursorPos","pstruct",pt0)
return ret0
结束
=======================================================
上面的讲解繁多。
把注释去掉,代码还是很简洁的。
功能 执行()
var pt = pt0()
GetCursorPos(pt)
messagebox(pt["x"]["value"]&","& pt["y"]["value"])
结束
功能 pt0()
var pt0 = 数组()
pt0["x"] = 数组("long"=1,"value"=0)
pt0["y"] = 数组("long"=1,"value"=0)
return pt0
结束
功能 GetCursorPos(&pt0)
var ret0=dllcall("user32.dll","long","GetCursorPos","pstruct",pt0)
return ret0
结束
本贴记录在:tc简单开发吧,精品区目录8,项目未归类。


  • 剑仙十号
  • tc金仙
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
下面做代码测试,新手不用理会。
在C++中调用GetCursorPos(),直接是GetCursorPos(&结构体名)
tc帮助文档,
dllcall→参数类型中的p,相当于C++的&,取址符。
封装时先用& 引用传参,再用dllcall→参数类型的字母p取址。
白话点,封装过程先用&传址,再用字母p取址。
测试目的:tc能否像C++一样,用&封装api,用&调用api?
//打开tc7.0,新建tc项目。右键界面,点击“查看源文件(F)”。
//这样,代码编辑框已经打开。按Ctrl+A全选。把代码全部覆盖粘贴进去。
var 线程ID
功能 执行()
var pt = pt0()
GetCursorPos(&pt) //这句编译不通过。直接报错。
messagebox(pt["x"]["value"]&","& pt["y"]["value"])
结束
功能 启动_热键()
//英文value_bool,布尔值,逻辑值
var vabool = 线程获取状态(线程ID)
if(vabool == false)
线程ID = 线程开启("执行", "")
elseif(vabool == true)
traceprint("线程执行中, 不用重复启动。")
end
结束
功能 终止_热键()
线程关闭(线程ID)
线程ID = 0
结束
功能 pt0()
var pt0 = 数组()
pt0["x"] = 数组("long"=1,"value"=0)
pt0["y"] = 数组("long"=1,"value"=0)
return pt0
结束
功能 GetCursorPos(pt0)
var ret=dllcall("user32.dll","long","GetCursorPos","pstruct",pt0)
return ret
结束
//测试报错。
//测试报错。
测试目的:数组的继承。
tc,封装的struct函数,函数名带0,数组名带0,
把封装的函数调用一次,数组能否继承过来?
//打开tc7.0,新建tc项目。右键界面,点击“查看源文件(F)”。
//这样,代码编辑框已经打开。Ctrl+A全选。把代码全部覆盖粘贴进去。
var 线程ID
功能 执行()
var pt = pt0()//数组的继承。
GetCursorPos(pt)
messagebox(pt["x"]["value"] & "," & pt["y"]["value"])
结束
功能 启动_热键()
var vabool = 线程获取状态(线程ID)
if(vabool == false)
线程ID = 线程开启("执行", "")
elseif(vabool == true)
traceprint("线程执行中, 不用重复启动。")
end
结束
功能 终止_热键()
线程关闭(线程ID)
线程ID = 0
结束
功能 pt0()
var pt0 = 数组()
pt0["x"] = 数组("long" = 1, "value" = 0)
pt0["y"] = 数组("long" = 1, "value" = 0)
return pt0
结束
功能 GetCursorPos(&pt0)
var ret = dllcall("user32.dll", "long", "GetCursorPos", "pstruct", pt0)
//参数4,tc,dllcall中的p,相当于C++的&.是取地址.
return ret
结束
测试成功。
测试成功。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1回复贴,共1页
<<返回tc简单开发吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示