网际风官网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3327|回复: 0

Trade.dll 股票交易接口C#调用源代码

[复制链接]

9

主题

12

帖子

420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
420
发表于 2023-11-10 20:18:58 | 显示全部楼层 |阅读模式


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Specialized;
using System.Web;
using System.Net.Sockets;
using static System.Net.Mime.MediaTypeNames;

//总体说明:调用很简单,载入dll→发出指令→等待结果→解析结果

namespace TradeCS
{
    class CTest
    {
        [DllImport("Trade.dll")]
        private extern static int Start(RcvCallback_ callBack, IntPtr answer, int maxLen); //注册回调函数

        [DllImport("Trade.dll")]
        public extern static int Ask([MarshalAs(UnmanagedType.LPTStr)] string ask, IntPtr answer, int maxLen); //发出指令,参数参考调用规范填写,比如 下单?请求=登录&券商=信达证券
        [DllImport("Trade.dll")]
        private extern static int Stop();   //注销

        [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        public delegate int RcvCallback_(IntPtr ans, IntPtr data, int len, IntPtr dataEx, int exLen);  //定义回调函数对应的委托

        public static RcvCallback_ m_callBack = null;

        public static TcpC m_tdx = null;

        public static CTest s_test  = new CTest();
        //回调函数占用内部线程,为防止锁死,禁用运行耗时严重任务或进行界面操作。
        public static int Answer(IntPtr ans,  IntPtr data, int len, IntPtr dataEx, int exLen)
        {
            String query = KV_BASE.String(ans, "请求");
            String pkName = KV_BASE.String(ans, "包名称");
            String err = KV_BASE.String(ans, "错误");
            String kind = KV_BASE.Kind(ans);
            int td = KV_BASE.Int(ans, "通道");
            if (err.Length > 0)
            {
                Console.WriteLine(err);

                return 1;
            }
            if (kind == "内部指令")
            {
                if (query == "重新载入 Trade.dll")
                {
                    MessageBox.Show("Trade.dll 有升级,需要重启程序后生效。", "提示信息", MessageBoxButtons.YesNo);

                    return 0;    //返回 0 ,然后重启您的程序。
                }

                return 1;
            }
            if (pkName == "发送包")
            {
                if (td == 0)  //其它模式和通道自行参考改写
                {
                    return m_tdx.Answer(ans, data, len, dataEx, exLen);
                }

                return 1;
            }

            return 1;
        }
        static Task Main(string[] args)
        {
            Console.Write("股票交易接口使用。\r\n\r\n");

            Console.Write("按 q + 回车 退出演示。\r\n\r\n");
            Console.Write("正在初始化交易客户端。\r\n\r\n");
            Console.Write("参考调用规范,直接输入下单指令。\r\n\r\n");

            m_callBack = Answer;

            int maxLen = 2048 * 1000;
            IntPtr answer = Marshal.AllocHGlobal(maxLen);  //多线程,需要每个线程分配一次

            string txt = null;
            string str = null;
            bool proMode = true;  //true 专业模式,将自行与券商进行TCP通讯;默认 false 使用trade.dll进行TCP通讯
            int ret = Start(m_callBack, answer, proMode ? 8888 : maxLen);   //注册回调函数,8888表示专业模式
            if (ret > 0)
            {
                if (proMode)
                {
                    str = KV_BASE.Json(answer);
                }
                else
                {
                    str = Marshal.PtrToStringUni(answer);
                }
                Console.WriteLine(str);
            }
            txt = "下单?请求=连接Trade.exe";
            ret = Ask(txt, answer, maxLen);
            if (ret > 0)
            {
                if (proMode)
                {
                    str = KV_BASE.Json(answer);
                }
                else
                {
                    str = Marshal.PtrToStringUni(answer);
                }
                Console.WriteLine(str);
            }
            txt = "下单?请求=登录&模块=认证&账号=6&密码=1&自动升级=开发版&版本=20221120&等待=10000";
            //填写自己认证账号密码
            //自动升级:稳定版、最新版、测试版、开发版,大部分账号选择稳定版,其中开发版不支持自动升级,需要手工升级。
            ret = Ask(txt, answer, maxLen);
            if (ret > 0)
            {
                if (proMode)
                {
                    str = KV_BASE.Json(answer);
                }
                else
                {
                    str = Marshal.PtrToStringUni(answer);
                }
                Console.WriteLine(str);
            }
            m_tdx = new TcpC();  //负责券商数据交换,每个通道建立一个实例

            txt = "下单?请求=登录&通道=0&模块=小信&信用=1&券商=开源证券&账号=8&密码=6&等待=20000";
            //txt = "下单?请求=登录&通道=0&模块=小信&信用=0&券商=开源证券&账号=85001688&密码=601995&等待=10000";
            //填写自己券商账号密码

            ret = Ask(txt, answer, maxLen);
            if (ret > 0)
            {
                if (proMode)
                {
                    str = KV_BASE.Json(answer);
                }
                else
                {
                    str = Marshal.PtrToStringUni(answer);
                }
                Console.WriteLine(str);
            }
            while (true)
            {
                txt = Console.ReadLine();
                if (txt == null)                  //非控制台方式
                {
                    break;
                }
                 if (txt == "q")  
                {
                    break;
                }
                ret = Ask(txt, answer, maxLen);  //输入调用指令
                if (ret > 0)
                {
                    if (proMode)
                    {
                        str = KV_BASE.Json(answer);
                    }
                    else
                    {
                        str = Marshal.PtrToStringUni(answer);
                    }
                    Console.WriteLine(str);
                }
            }
            txt = "系统?请求=退出接口";
                ret = Ask(txt, answer, maxLen);

            Stop();                                 //注销
            Marshal.FreeHGlobal(answer);            //释放内存

            return Task.CompletedTask;
        }
    }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|网际风官网 ( 闽ICP备19018805号 )

GMT+8, 2025-6-16 01:37 , Processed in 1.121676 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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