usb芯片CH372的dll调用

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

这里主要记录研究过程:

函数原型的调用

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;

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

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...