aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 11680|回复: 4

DLL API结构动态数组赋值问题。。。

[复制链接]

2

主题

7

回帖

88

积分

一级会员

积分
88
发表于 2016-12-3 11:14:18 | 显示全部楼层 |阅读模式
本帖最后由 aau007 于 2016-12-3 11:16 编辑

DLL API结构动态数组赋值问题。。。

bool  TdxHq_GetSecurityQuotes(byte Market[], char* Zqdm[], short& Count, char* Result, char* ErrInfo);//DLLapi c语言函数原型
我用aardio转换工具自动转换为:
  TdxHq_GetSecurityQuotes= dll.api("TdxHq_GetSecurityQuotes","bool(byte Market[], string Zqdm[], word& Count, string Result, string ErrInfo)");

  用于看手册说API数组参数要 结构体传数据,我就改成下面的定义:
        var TdxHq_GetSecurityQuotes = TdxHq.api("TdxHq_GetSecurityQuotes","bool(struct Market, struct Zqdm, word &Count,  String &Result, String &ErrInfo)","stdcall");   


        market = class  {
        struct mark = {  byte [10]  ; }
        }
        
         zqdm  = class{
       struct dm = {  string [10]  ;}
        }        

     var Market1 = market()
     Market1.mark = {0;1};

     var Zqdm1 = zqdm();
     Zqdm1.dm = {"300031" ; "00688"};

       var Count = 2;
     boolret,Result,ErrInfo = TdxHq_GetSecurityQuotes(Market1,  Zqdm1, 2, 65535, 256);
                        if (!boolret)
                        {
                            thread.command.print(string.fromto(ErrInfo,0,65001));
                                return;
                        }
        thread.command.print(string.fromto(Result,0,65001) );
        
        结果调用未成功,本人aardio刚入门,希望高手看看,哪里定义出错了?

10

主题

66

回帖

654

积分

三级会员

积分
654
发表于 2016-12-6 09:55:48 | 显示全部楼层
你没有理解原定义,result、errInfo是保存结果的,都没有定义正确。

修改如下试试:
TdxHq_GetSecurityQuotes = TdxHqApi.api("TdxHq_GetSecurityQuotes"
    ,
"bool(struct market, struct zqdm,word& count, string result, string errInfo)");

var result = raw.buffer(1024*1024);
var errInfo = raw.buffer(512);
var market = { byte buffer[]={0;0} };      
var zqdm = { string buffer[]={"000001";"000002"} };

var ret = TdxHq_GetSecurityQuotes(market, zqdm, 3, result, errInfo);

错误时result为空,否则就是返回的数据。

不声明API也可以直接调用
var result = raw.buffer(1024*1024);
var errInfo = raw.buffer(512);
var ret = TdxHqApi.TdxHq_GetSecurityQuotes(
    { byte market[] = {0,1} },{string zqdm[] = {
"000001","600030"} },
    2,result,errInfo);




2

主题

7

回帖

88

积分

一级会员

积分
88
 楼主| 发表于 2016-12-8 23:46:42 | 显示全部楼层
谢谢你的回复,问题主要是table Market[], table Zqdm[] 数组的传值不对引起的,我自己用另一种方式,已经解决了,就是定义成pointer;不过按照你的方式定义成数组,也成功了,十分感谢

2

主题

21

回帖

161

积分

一级会员

积分
161
发表于 2016-12-19 11:10:07 | 显示全部楼层
学习。。。。。。。。。。。

6

主题

8

回帖

110

积分

一级会员

积分
110
发表于 2018-3-28 00:36:28 | 显示全部楼层
这个是通达信炒股用的吧,学习中,看不太懂,先收藏了,谢谢。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-1-19 00:28 , Processed in 0.057970 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表