为什么我的CTP程序能连接前置机,但是用ReqUserLogin()确登录不了。 (一)我将MdSpi.h做如下定义 #pragma once #include "ThostFtdcMdApi.h" //#import "thostmduserapi.dll" named_guids, raw_interfaces_only //////////////////////// #include "iostream" #pragma warning(disable : 4996) #pragma comment(lib,"thostmduserapi.lib") //#import "thostmduserapi.DLL" no_namespace // USER_API参数 /////////////////// class CMdSpi : public CThostFtdcMdSpi { public: CWnd * m_mdwnd; ///错误应答 virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo,int nRequestID, bool bIsLast) { ::AfxMessageBox("错误应答"); } ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 ///@param nReason 错误原因 /// 0x1001 网络读失败 /// 0x1002 网络写失败 /// 0x2001 接收心跳超时 /// 0x2002 发送心跳失败 /// 0x2003 收到错误报文 virtual void OnFrontDisconnected(int nReason) { ::AfxMessageBox("前置机已经断开连接");//做测试用的,呵呵 } ///心跳超时警告。当长时间未收到报文时,该方法被调用。 ///@param nTimeLapse 距离上次接收报文的时间 virtual void OnHeartBeatWarning(int nTimeLapse) { ::AfxMessageBox("OnHeartBeatWarning"); } ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 virtual void OnFrontConnected() { ///////////////////////////////////// AfxMessageBox("建立连接!"); } ///登录请求响应 virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { ::AfxMessageBox("登录请求响应!"); } ///订阅行情应答 virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { ::AfxMessageBox("OnRspSubMarketData"); } ///取消订阅行情应答 virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) { ::AfxMessageBox("OnRspSubMarketData"); } ///深度行情通知 virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) { ::AfxMessageBox("OnRtnDepthMarketData"); } private: // void ReqUserLogin(); // void SubscribeMarketData(); // bool IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo); CMdSpi *m_pUserSpi; CThostFtdcMdApi *m_pUserApi; }; 并将上述头文件添加在我的工程文件中。 但是不添加 MdSpi.cpp文件。 (二)在我的dialog对话框程序的init中 加入如下代码: CThostFtdcMdApi* pUserApi=CThostFtdcMdApi::CreateFtdcMdApi(); CMdSpi* pUserSpi = new CMdSpi(); pUserApi->RegisterSpi((CMdSpi*)pUserSpi); // 注册事件类 char FRONT_ADDR[] = "tcp://asp-sim2-md1.financial-trading-platform.com:26213";// 行情前置地址; pUserApi->RegisterFront(FRONT_ADDR); // connect pUserApi->Init(); //建立前后台连接// ///////////////////////////////////// TThostFtdcBrokerIDType BROKER_ID = "2030";// 经纪公司代码 TThostFtdcInvestorIDType INVESTOR_ID = "xxxxxx";// 投资者代码 TThostFtdcPasswordType PASSWORD = "xxxxxx";// 用户密码 // 请求编号/////////////// int iRequestID = 0; //////////////////// CThostFtdcReqUserLoginField req; memset(&req, 0, sizeof(req)); strcpy(req.BrokerID, BROKER_ID); strcpy(req.UserID, INVESTOR_ID); strcpy(req.Password, PASSWORD); int iResult = -1; iResult = pUserApi->ReqUserLogin(&req,++iRequestID); CString aaa = pUserApi->GetTradingDay(); MessageBox(aaa,""); (三)结果如下: MdSpi.h中的这个函数有了响应,弹出"检录连接"对话框。 应该是pUserApi->Init(); //建立前后台连接// 执行的结果. virtual void OnFrontConnected() { ///////////////////////////////////// AfxMessageBox("建立连接!"); } 但是: iResult = pUserApi->ReqUserLogin(&req,++iRequestID); 得到的iResult 总是-1; 注:用户名,密码肯定不会错的,我在海风CTP下使用过。 CString aaa = pUserApi->GetTradingDay(); 这时aaa="19800100" 谁能告诉我什么原因? 谢谢!!!!!!!!
上期技术的 .H文件 lib,dll库直接加载在MFC中好像无法使用 上期技术的 .H文件 lib,dll库直接加载在MFC中好像无法直接使用。 该如何改造才能在VC6.0 mfc下使用呢?????????