125 次浏览【转载需注明来源】
这里拿一个启动线程的链接库命令讲解,首先抛砖引玉给出易语言介绍:
其次我们再看看MSDN上面的介绍:
注解:其实一般只需要看易语言的DLL资料,就能够封装了;接下来再看看易语言的使用方案:
上面是易语言的使用代码,接下来我们再看看快码中如何使用:
动态链接库.加载链接库("kernel32.dll", {
"CreateThread": ["注册函数", { "函数参数": ["int"], "返回类型": "void", "函数整体": "bool __stdcall CreateThread(int lpThreadAttributes,int dwStackSize,GetCallback *cb1,int lpParameter,int dwCreationFlags,_Out_ int *lpThreadId)", "回调函数名称": "GetCallback", "回调函数": 测试回调 }]
});
定义函数 测试回调(c1) {
调试输出(c1); //可无限参数
}
局部变量 转换结果 = [0];
动态链接库.使用命令("CreateThread")(0, 0, 动态链接库.获取回调对象("CreateThread"), 100, 0, 转换结果);
上面是快码的封装代码,接下来我们对代码进行刨析:
1、首先如果需要你的链接库API是需要进行回调的,那么你需要定义一个函数,回调函数有多少参数则你定义的函数就应该有多少参数;上面的:定义函数 测试回调()就是定义的线程回调函数,该函数拥有一个参数,为线程传参数据。
2、与常规API使用不同的是,当你的API有回调参数时,你需要使用数组的方式来定义,例如: ["注册函数", { "函数参数": ["int"], "返回类型": "void", "函数整体": "一段函数的命令", "回调函数名称": "GetCallback", "回调函数": JS的定义函数命令 }]
注解:数组的第一个成员是文本型,通常填入:注册函数,代表当前格式是注册函数
注解2:数组的第二个成员是一个对象,其中:"函数参数"是一个数组类型,代码回调函数的参数数量以及参数类型,例如:"int","str"
注解3:"返回类型"代表JS回调函数的返回数据类型,void代表没有返回值;否则可填入:int、str等其他数据类型作为回调函数的返回值类型
注解4:"函数整体"代表函数的整体,在上述的案例中为: "bool __stdcall CreateThread(int lpThreadAttributes,int dwStackSize,GetCallback *cb1,int lpParameter,int dwCreationFlags,_Out_ int *lpThreadId)" 这里可以看见参数3回调函数设置的为:GetCallback *cb1,其中cb1是参数名称GetCallback是回调函数名称,而回调函数名称的定义是通过:"回调函数名称": "GetCallback"来定义的
注解5:"回调函数"则代表绑定的JS定义函数名称
常规API:
动态链接库.加载链接库("user32.dll",{ "SetCursorPos": "bool __stdcall SetCursorPos(int X,int y)"})
有回调函数的API:
动态链接库.加载链接库("kernel32.dll", {
"CreateThread": ["注册函数", { "函数参数": ["int"], "返回类型": "void", "函数整体": "bool __stdcall CreateThread(int lpThreadAttributes,int dwStackSize,GetCallback *cb1,int lpParameter,int dwCreationFlags,_Out_ int *lpThreadId)", "回调函数名称": "GetCallback", "回调函数": 测试回调 }]
});
测试账号
快码FOF编程 Time: 2023-09-22 17:08:19
评论ID
回调函数讲解