使用Wind股票的C#接口,但是收不到结果?!!

saji02 2016-06-27 04:48:08
各位好:

Wind接口是用来给用户获取实时的股票数据的,小弟要使用的是其中的wsq()方法。因为该接口的C#版本的用户手册貌似没有及时更新,我们这里无法给出具体的语法。(但是该接口提供了一个叫做“命令生成器”的小工具,用于生成调用相关方法的代码。因此,我能确保具体的语法是准确的)

小弟使用的代码如下,然而始终得不到接口返回的数据,不知道错在哪里?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using WAPIWrapperCSharp; //接口dll
using WindCommon; //用于处理返回数据的格式转换,也是接口提供的

namespace WSQ2String
{
class WSQ2StringSample
{
//主程序
static void Main()
{
Console.Write("Begin......");
Console.ReadLine();
//----API登陆
WindAPI w = new WindAPI(); //生成接口实例
Console.WriteLine("New API created!");
w.start(); //登陆接口
Console.WriteLine("API started!");
//----订阅行情
int errorId = 0;
ulong reqId = w.wsq(ref errorId, "150195.sz", "rt_date, rt_time, rt_lastest", "", myCallback); //调用wsq方法订阅行情
Console.WriteLine("errorId = {0}", errorId);
//加入语句控制用户程序的向后执行
Console.ReadLine(); //在键入任意键后,我们便可以中止行情的订阅
w.cancelRequest(reqId);
w.stop();
Console.Write("End......");
Console.ReadLine();
}
//回调函数定义
static void myCallback(ulong reqId, WindData wd)
{
Console.WriteLine("wsq data gotback......");
//WindData类型转换,并输出到屏幕
string s = WindDataMethod.WindDataToString(wd, "wsq"); //接口提供的用于将其自定义的数据类型转换成string
Console.Write(s);
}
}
}


以上代码中,我已尽可能的注释了。因为代码的执行功能也非常简单,因此相信大家能够看清楚的。
关键是,小弟没有使用回调函数的经验,不知道我的使用中烦了什么错误,导致始终无法得到返回的数据。。。。
请各位指教!
...全文
729 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxn10050812 2019-11-20
  • 打赏
  • 举报
回复
C# 接口库文件WAPIWrapperCSharp.dll这个在哪里下载呀,dajiangzhang进不去了,网上找不到资源,方便发一份给我吗,非常感谢1406762674@qq.com
tcmakebest 2016-06-28
  • 打赏
  • 举报
回复
代码看光只能解决语法问题, 还是要能运行才能解决运行过程的问题.
saji02 2016-06-28
  • 打赏
  • 举报
回复
引用 11 楼 xuzuning 的回复:
1. C# 接口库文件 C#接口不随安装包一起发布。用户需要从大奖章网站手动下载:http://www.dajiangzhang.com/download Wind量化平台-接口库文件-C# 解压后的文件夹中,WAPIWrapperCSharp.dll为C#库文件;Samples为例子;doc为帮助文档;src 为C#接口源代码,有经验的开发者,可以根据自己的需求改进C#接口,甚至开发其它语言的Wind量化接口,比如SaS。 2. C# 接口 使用注意事项 在您的程序中直接引用类型库即可编程。使用之前,可以手动通过cmd命令进入Wind安装目录,通过输入regsvr32 windmatlab.ocx进行注册,也可以通过Wind终端修复任意wind插件实现。 如果您把您编写的程序发布到其他机器使用,请确认在目标机器上已经安装了Microsoft .Net Framework 4.0 他应该使用了 COM 组件,但你贴出的代码中看不到这一点
额,我采用类似的框架,调用了wind接口提供的wsi()方法,并成功输出到屏幕; 因此,在安装及使用接口方面,我认为应该是没有问题的。。。。 主要还是在回调的使用上。
xuzuning 2016-06-28
  • 打赏
  • 举报
回复
把 myCallback 声明为 public 看看 Wind接口不是提供有 C# 调用说明吗,你看了没有?
xuzuning 2016-06-28
  • 打赏
  • 举报
回复
有个问题不知你了解过否 Wind 接口 需要用手机号注册,那么他是否会从话费中提取他的服务费? 电信的网路电视会,但他从不跟你说
xuzuning 2016-06-28
  • 打赏
  • 举报
回复
1. C# 接口库文件 C#接口不随安装包一起发布。用户需要从大奖章网站手动下载:http://www.dajiangzhang.com/download Wind量化平台-接口库文件-C# 解压后的文件夹中,WAPIWrapperCSharp.dll为C#库文件;Samples为例子;doc为帮助文档;src 为C#接口源代码,有经验的开发者,可以根据自己的需求改进C#接口,甚至开发其它语言的Wind量化接口,比如SaS。 2. C# 接口 使用注意事项 在您的程序中直接引用类型库即可编程。使用之前,可以手动通过cmd命令进入Wind安装目录,通过输入regsvr32 windmatlab.ocx进行注册,也可以通过Wind终端修复任意wind插件实现。 如果您把您编写的程序发布到其他机器使用,请确认在目标机器上已经安装了Microsoft .Net Framework 4.0 他应该使用了 COM 组件,但你贴出的代码中看不到这一点
saji02 2016-06-28
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
我想这是因为控制台程序的原因Console.ReadLine(); 阻塞了主进程运行 你换成winform应该就没问题了 至于你说的回调函数,在C#里我们理解为委托。有关这块你理解有问题,委托/回调并不基于线程(当然你倒是可以在线程里调用委托,但他本身并不基于线程)
感谢您的答复: 1、winform我还不会用,需要研究一下,看看如何替代控制台; 2、若委托回调不基于线程,你说的“阻塞了主进程的运行”中的“主进程”是指的什么? 3、若是进程有分主次,那么异步回调应该也是各管各的执行吧? 即是主进程执行readline,当事件触发后接口通过次进程调用myCallback。否则的话,异步回调不是没法实现了吗? 请指教
saji02 2016-06-28
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
把 myCallback 声明为 public 看看

Wind接口不是提供有 C# 调用说明吗,你看了没有?


谢版主回复。。。
我考虑了一下,确实,我们提供的回调函数是给接口从我们的类(wsq2stringsample)外部使用的。
因此应该声明为public。
以下是我们使用该接口自带的命令生成器所得的示范代码:


但是,我们将myCallback声明为public后,所得的结果和之前仍是一样的。
即输出errorId后,便没有反应了。。。
虽然我们是在股市收盘后调用的,此时价格不会实时更新,但至少应该有首次返回的价格,如同上图命令生成器中返回的,我们也是在收盘后使用命令生成器后,得到的首次价格的输出)

还请版主指点
龍过鸡年 2016-06-27
  • 打赏
  • 举报
回复
http://www.docin.com/p-711392084.html
wanghui0380 2016-06-27
  • 打赏
  • 举报
回复
我想这是因为控制台程序的原因Console.ReadLine(); 阻塞了主进程运行 你换成winform应该就没问题了 至于你说的回调函数,在C#里我们理解为委托。有关这块你理解有问题,委托/回调并不基于线程(当然你倒是可以在线程里调用委托,但他本身并不基于线程)
cheng2005 2016-06-27
  • 打赏
  • 举报
回复
修复一下wind插件。
  • 打赏
  • 举报
回复
呵呵,这如果是 WindAPI 本身的问题,那么它有可能是在一个“windows桌面应用”上而不是“控制台应用”上设计的。 为了避免引入复杂性,你还是创建一个窗口应用吧。我猜你的问题不会发生了。
saji02 2016-06-27
  • 打赏
  • 举报
回复
这是我的代码运行的结果:
saji02 2016-06-27
  • 打赏
  • 举报
回复
补充以下: 1、小弟使用上述代码的框架输出了wind接口的其它方法函数的返回数据(是一般的成员方法),没有出现问题。因此,猜想是使用回调函数的过程中产生了错误。 2、小弟对回调函数的理解是:我们在调用的订阅行情的方法(wsq)时,提供了用于给接口回调的回调函数(myCallback)。接口将使用另一条线程,调用回调函数,并通过其中的参数wd,来返回我们要查询的数据。 而我们的主程序则会停留在readline这一步。 3、因此,我们仅需确保在事件触发接口回调时,我们所提供的回调函数仍可以被调用即可! 请各位指点以下

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧