当前位置:网站首页>Aardio - Method of batch processing attributes and callback functions when encapsulating Libraries

Aardio - Method of batch processing attributes and callback functions when encapsulating Libraries

2022-07-06 22:31:00 Lu Guangqing

About the method of batch processing attributes and callback functions when encapsulating libraries , stay

《 Aardio - Method parsing of callback function _ Luguangqing's blog -CSDN Blog _aardio Function manual  》

It is mentioned in the article that , It's called “ Guangqing callback method ”.

Because there is no example code of a complete system in the above , Just look at code snippets , It may be difficult to understand , So it should be partially aardio Friend needs , A set of specific example code is sorted out here , For reference :

One 、dll How to deal with :

    Take Yi language as an example :

Two 、aardio Methods declared and called in :

import console; 

var dll = ..raw.loadDll("/test.dll");

// Define functions that set properties 
var setp = dll.api("setProp","bool(string,string)")
setProp = function(prop,v){ // Because easy language compilation dll by ansi code , Therefore, transcoding is required when passing parameters .
	if type(v)=type.table v=..table.tostring(v);
	return setp(..string.fromto(prop,65001,0),..string.fromto(tostring(v),65001,0)); 
}

// Define the function to get properties 
var getp = dll.api("getProp","ptr(string)")
getProp = function(prop){ // Because easy language compilation dll by ansi code , Therefore, transcoding is required when passing parameters .
	var str = ..raw.str(getp(..string.fromto(prop,65001,0)));
	str = ..string.fromto(str,0,65001);
	return eval(str); 
}

// Define callback function 
var callback = function(funcname,param){
	funcname = ..string.fromto(funcname,0,65001);
	if console[funcname] return console[funcname](..table.unpack(eval(..string.fromto(param,0,65001))));
}
var _stdfunc = ..raw.tostdcall(callback,"int(string,string)");
dll.setcallback(tonumber(..raw.toPointer(_stdfunc)));


//******************* Start testing 

// Test attribute 
// In theory , Any number of attributes can , stay aardio There is no need to deal with it one by one . stay dll You can deal with it in .

setProp("prop1"," I am a text attribute ") 			// Text 
setProp("prop2",123456) 					// The number 
setProp("prop3",true)						// Logic 
setProp("prop4",{123,{1,2,3},"abc",true}) 	// Array 

console.dump(getProp("prop1"),  type(getProp("prop1")))
console.dump(getProp("prop2"),  type(getProp("prop2")))
console.dump(getProp("prop3"),  type(getProp("prop3")))
console.dump(getProp("prop4"),  type(getProp("prop4")))

// Test callback 
// Define three aardio Callback function , The key is that these three callback functions are not converted to stdcall, But through a callback Callback function execution .
// In theory , Any number of callback functions can , stay aardio There is no need to deal with it one by one . stay dll Just call it at will .

console.func1 = function(v){
	console.dump(" Callback execution ============",'\n',v)
}

console.func2 = function(v){
	console.dump(" Callback execution ============",'\n',(v*10)+567)
}

console.func3 = function(a,b,c,d){
	console.dump(" Callback execution ============",'\n',a,(b+1)*1123,c,!c,d,d[2])
}
// Analog callback , Call three callback functions 
dll.testcallback()


console.pause(true);
fsys.remove()

3、 ... and : The code download :

Guangqing callback method demonstration .rar - Blue clouds

原网站

版权声明
本文为[Lu Guangqing]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061439345875.html