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

Posted

技术标签:

【中文标题】QuickFIX 和 MFC:无法使用 Initiatior.logon() 函数登录【英文标题】:QuickFIX and MFC: cannot login using Initiatior.logon() function 【发布时间】:2016-08-22 16:52:34 【问题描述】:

我正在开发一个 GUI 应用程序,我尝试将 QuickFIX 库集成到 MFC 中。我已经成功添加了所有需要的库和包含,但是,当我尝试使用 login() 函数进行连接时,我遇到了麻烦。首先,引擎开始在配置文件中请求更多字段,而在控制台应用程序中它并不关心这些字段。其次,在登录请求后,我收到“调试断言失败!程序:C:\Windows\System32\MSVCP120D.DLL 文件:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtree 线路:327 表达式:映射/设置迭代器不兼容”。 我想做的是如下: 我有一个菜单。如果您在菜单中按“开始”,我将布尔标志设置为真。在我的 OnKickIdle 函数(应用程序是基于对话框的)中,我检查这个标志,如果它被设置 - 我开始正常启动 SockeInitiator。一切正常,直到我调用 logon() 函数,并且在它被调用之后 - 调试断言被抛出。这是 CallStack 输出:

msvcp120d.dll!std::_Debug_message(const wchar_t * message, const wchar_t * file, unsigned int line) 第 15 行 C++ OKKOIN_BOT.exe!std::_Tree_const_iterator > > >::operator==(const std::_Tree_const_iterator > > > & _Right) 第 327 行 C++ OKKOIN_BOT.exe!std::_Tree_const_iterator > > >::operator!=(const std::_Tree_const_iterator > > > & _Right) 第 341 行 C++ OKKOIN_BOT.exe!FIX::SocketInitiator::onTimeout(FIX::SocketConnector & __formal) 第 227 行 C++ OKKOIN_BOT.exe!FIX::SocketInitiator::onStart() 第 93 行 C++ OKKOIN_BOT.exe!FIX::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;

【问题讨论】:

调试它,这样会更容易,而不是我们试图猜测。这不是一个快速修复问题,而是更多您的代码。 实际上我在调试模式下运行它,我无法理解是什么造成了这个问题,因为它在 login() 调用之后直接发生。如果我在调试模式下运行应用程序,我可以看到它在我的代码中发生的位置 - 但我无法理解导致此错误的原因。 【参考方案1】:

我终于找到了问题。 MFC 本身的问题是因为它不支持 QuickFIX 所需的 Windows Sockets 2。我想这个问题可以结束了。

【讨论】:

以上是关于QuickFIX 和 MFC:无法使用 Initiatior.logon() 函数登录的主要内容,如果未能解决你的问题,请参考以下文章

在 Vim 中使用 quickfix 列表搜索和替换

Quickfix - 在 Python 中设置序列号

Quickfix/j 不尝试连接到指定的套接字

在 Visual Studio 2010 (utility.obj) 中使用带有 VC++ 的 QuickFix 时出错

Visual Studio 上 .NET 的 QUICKFIX 64 位构建(.NET C++ DLL Wrapper)

使用 Quickfix 市场数据增量刷新时标签出现多次