QuickFIX和MFC:无法使用initiator .logon()函数登录
QuickFIX and MFC: cannot login using Initiatior.logon() function
我正在开发一个GUI应用程序,我试图将QuickFIX库集成到MFC中。我已经成功地添加了所有需要的库和包,但是,当我尝试使用logon()函数进行连接时,我遇到了麻烦。首先,引擎开始在配置文件中要求更多字段,这在控制台应用程序中并不重要。其次,在登录请求之后,我收到"调试断言失败!"程序:C:WindowsSystem32 msvcp120 . dll文件:C:Program Files (x86)Microsoft Visual Studio 12.0VCincludextree . dll线:327表达式:map/set iterators incompatible"。我想做的是:我有菜单。如果你按下菜单中的"开始",我将bool标志设置为true。在我的OnKickIdle函数(应用程序是基于对话框的)中,我检查这个标志,如果它被设置-我启动SockeInitiator的正常初始化。在调用logon()函数之前一切正常,调用之后抛出调试断言。这是CallStack的输出:
msvcp120d.dll !std::_Debug_message(const wchar_t * message, const wchar_t * file, unsigned int line) c++第15行OKKOIN_BOT.exe !std::_Tree_const_iterator>>>::operator==(const std::_Tree_const_iterator>>> &第327行c++OKKOIN_BOT.exe !std::_Tree_const_iterator>>>::operator!=(const std::_Tree_const_iterator>>> &第341行c++OKKOIN_BOT.exe !修复:SocketInitiator:: onTimeout(解决办法::SocketConnector,__formal)第227行修复::SocketInitiator::onStart() 93行c++OKKOIN_BOT.exe !修复::Initiator::startThread(void * p) 286行c++[外部代码]
是否有人经历过同样的问题,并试图将QuickFIX集成到MFC中?提前谢谢大家。这也是我的OnKickIdle()函数的一部分:
LRESULT COKKOIN_BOTDlg::OnKickIdle(WPARAM wparam, LPARAM lparam)
{
if (b_startFlag)
{
std::string filepath = "quickfix-client.cfg";
FIX::SessionSettings settings(filepath);
Application app(settings);
FIX::FileStoreFactory storefact(settings);
FIX::ScreenLogFactory logfactory(settings);
FIX::SocketInitiator initiator(app, storefact, settings, logfactory);
b_initflag = TRUE;
//initializing the needed variables
initiator.start(); //use poll instead
Sleep(2000);
if (initiator.isLoggedOn())
{
MessageBox(L"Logged On", L"Information", MB_OK | MB_ICONINFORMATION);
}
else
{
MessageBox(L"Not Logged On", L"Information", MB_OK | MB_ICONINFORMATION);
}
}
return FALSE;
}
我终于找到问题了。问题在于MFC本身,因为它不支持Windows Sockets 2,这是QuickFIX所要求的。我想这个问题可以结束了。