usb芯片CH372的dll调用

By admin at 2017-12-10 • 0人收藏 • 479人看过

这里主要记录研究过程:

函数原型的调用

var dll = ..raw.loadDll($"\res\xxxDLL.dll",,"cdecl");

为什么后面要用cdecl这个调用约定?

我自己的理解是这个dll是用vc++写的,风格呢就是c的风格,所以调用约定指定为C

Xxxdll_OpenDevice = dll.api("xxxdll_OpenDevice","int(void)");

它的原型是

int HUAVEDAQ_OpenDevice(void)

下一个函数

Xxxdll_ReadSingleLightPower= dll.api("Xxxdll_ReadSingleLightPower","int( INT channel, INT lightWavelenght, float &LightPower )")

原型为

int Xxxdll_ReadSingleLightPower( unsigned char channel, unsigned char lightWavelenght, float *LightPower )

还有一个

Xxxdll_ReadVersion= dll.api("Xxxdll_ReadVersion","int( pointer str)");

原型为

int Xxxdll_ReadVersion( char *str )

这里需要注意的是最后一个,因为版本号的读取,c原型里面是用的指针指向数组的头,是一个字节一字节的数据,所以这样写.


这些操作完成后,需要调用

mainForm.button4.oncommand = function(id,event){
    var status,power = Xxxdll_ReadSingleLightPower(1,1,0);//最后一个参数,需要随机填入一个数字,要不然指针会是Null,而报错
    if(status!=0){
        console.log("读取失败")
    }
    console.log(power) ;
     
}

这里要注意注释部分(110)的0,是随机写的,什么数字都可以的

,要特别注意这里的写法:

float &LightPower

这样写是因为aardio中这样规定的,所有原型中修改的数据,必须在输出中体现!

下面是读版本号

mainForm.button.oncommand = function(id,event){
    var str = raw.malloc(1000);
    var status=Xxxdll_ReadVersion(str);
  
    var straa = ""
    straa = initif(str,16 );
    console.log(straa) ;
     
}

因为我们的dll里面已经规定版本号是16个字节,所以我这里填写的是16.

第一步给数据分配空间,

第二步获取str这个指针

第三步,取这个指针的数据,按字节进行处理,

//转换为HEX码
var Hex=function(data,len){
    var str="";
    for(i=1;len;1){
            str = str++" "++string.right(string.format("X", data[ i ]),2);//默认转换成有符号字节,因此取最右边两位  HEX码
        }
    return str;

这里参考了以前的帖子里面的串口助手的写法.

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
Sciter中文在线文档Sciter在线学习文档
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
C大Aardio论坛:Aar爱好者论坛
简码教程网:简码编程
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...