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() 函数登录的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2010 (utility.obj) 中使用带有 VC++ 的 QuickFix 时出错
Visual Studio 上 .NET 的 QUICKFIX 64 位构建(.NET C++ DLL Wrapper)