请教Autoit如何实现结构体数组?
本帖最后由 emutemp 于 2015-2-3 08:43 编辑Autoit可以使用DllStructCreate来实现结构体。在此基础上,请教如何实现结构体数组的用法?
例如函数原型:
#pragma pack(push,1)
typedef struct student
{ charstuno;//学号一般比较长,用字符数组存放。
char name;//存放姓名
float score;//数组中存放2门课的成绩;
float sum;//存放总分
float aver;//存放平均成绩
}student; //结构体数组,能表示5个同学各自的信息
Autoit实现student结构体部分
DllStructCreate("struct;align 1;charstuno;char name;float score;float sum;float aver;endstruct")
现在问题是,函数原型中DLL调用结构体时,有很多笔记录,需要用结构体数组来存放,在Autoit里面用DLL调用结构体时,创建的结构体中好像只能存放1笔数据,如何实现“student”这个定义结构体数组的用法,让DLLCALL调用结构体时,能存放多笔数据? $tStudent = dllstructcreate
$tStudentArray = dllstructcreate(ptr dllstructgetptr($tstudent1);ptr dllstructgetptr($tstudent2);ptr dllstructgetptr($tstudent3);ptr dllstructgetptr($tstudent4);ptr dllstructgetptr($tstudent5);) 或者用ptr*/ptr**不知道行不行 本帖最后由 emutemp 于 2015-2-3 13:29 编辑
这样使用?
$tagStudent ="struct;align 1;charstuno;char name;float score;float sum;float aver;endstruct"
$tStudent1= dllstructcreate($tagStudent )
$tStudent2= dllstructcreate($tagStudent )
$tStudent3= dllstructcreate($tagStudent )
$tStudent4= dllstructcreate($tagStudent )
$tStudent5= dllstructcreate($tagStudent )
$tagStudentArray="ptr dllstructgetptr($tstudent1);ptr dllstructgetptr($tstudent2);ptr dllstructgetptr($tstudent3);ptr dllstructgetptr($tstudent4);ptr dllstructgetptr($tstudent5);"
$tStudentArray = dllstructcreate($tagStudentArray)
$HandleOpen=DllOpen("icomm.dll")
DllCall($HandleOpen,"int","GetInfo","int",$InfoNum,"ptr",DllStructGetPtr($tStudentArray))
似乎还不行,总共有3条信息记录,运行到DLLcall后autoit的脚本进程出错。
dll本身也有日志文件输出,看日志文件,GetInfo函数功能成功调用执行了,也返回了查询到的信息,估计还是autoit在将多条返回信息写结构体数组数据时出错了。 $tagStudentArray=dllstructcreate('ptr')行不行 $tagStudentArray=dllstructcreate('ptr')行不行
netegg 发表于 2015-2-3 19:46 http://www.autoitx.com/images/common/back.gif
这个语句似乎是独立的,怎么和上面其它的语句关联起来? 另外,在上面语句里
$tStudentArray = dllstructcreate($tagStudentArray)
后查看@error值,发现被设为1了,手册里ERROR为1是“ 传递给 DllStructCreate 的变量不是字符串.“
$tagStudentArray="ptr dllstructgetptr($tstudent1);ptr dllstructgetptr($tstudent2);ptr dllstructgetptr($tstudent3);ptr dllstructgetptr($tstudent4);ptr dllstructgetptr($tstudent5);"
$tStudentArray = dllstructcreate($tagStudentArray)
这两句语句似乎有问题? $tagStudentArray="ptr " & dllstructgetptr($tstudent1)& ";ptr " & dllstructgetptr($tstudent2) & ";ptr " & dllstructgetptr($tstudent3) & ";ptr " & dllstructgetptr($tstudent4) & ";ptr "&dllstructgetptr($tstudent5) & ";" 本帖最后由 emutemp 于 2015-2-3 22:53 编辑
$tagStudentArray="ptr " & dllstructgetptr($tstudent1)& ";ptr " & dllstructgetptr($tstudent2) & ";ptr ...
netegg 发表于 2015-2-3 22:04 http://www.autoitx.com/images/common/back.gif
谢谢。按这个$tStudentArray = dllstructcreate($tagStudentArray)没出错了。
不知这个
$tagStudentArray=dllstructcreate('ptr')
是什么意思,创建1个含有指针数组元素的结构? 怎么和之前的$tagStudent 联系起来用? 应该是不能 前断时间跟蛋蛋也请教过这问题,因为存取变量不行所以存取数组变量也不行。P版可能行 学习的好贴子啊
页:
[1]