QuickFIX和MFC:无法使用initiator .logon()函数登录

QuickFIX and MFC: cannot login using Initiatior.logon() function

本文关键字:logon initiator 登录 函数 MFC QuickFIX      更新时间:2023-10-16

我正在开发一个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所要求的。我想这个问题可以结束了。