我找到了这个解决方案,通过 C++ 使用用户名和密码在 QuickFIX 中进行登录部分。
使用 Visual Studio 2012 Express 时,我必须添加一个额外的 include 以避免“错误 C2680: 'FIX44::Logon &' : invalid target type for dynamic_cast”以显示 Visual Studio 2012 Express 如何动态转换:
#include "../../include/quickfix/fix44/Logon.h" // for dynamic_cast in Visual C++
void Application::toAdmin( FIX::Message& message, const FIX::SessionID& sessionID)
{
if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
{
FIX44::Logon& logon_message = dynamic_cast<FIX44::Logon&>(message);
logon_message.setField(FIX::Username("xxx"));
logon_message.setField(FIX::Password("yyy"));
}
}
使用此包含,不会发生编译时错误 - 但在运行时,我得到:“Microsoft C++ 异常:内存位置 0x02A0ED70 处的 std::bad_cast。”
据我调试,显示的 dynamic_cast 语句负责运行时错误。
我的问题是,如何绕过这个运行时错误并使用 Visual Studio 2012 Express 使用用户名和密码登录?