带有破解的login_message的quickfix bad_cast异常 [英] quickfix bad_cast exception with cracked login_message

查看:109
本文介绍了带有破解的login_message的quickfix bad_cast异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找到了解决方案,用于使登录部分在QuickFIX中通过C ++使用用户名和密码.

I found this solution to make the login part in QuickFIX via C++ with Username and Password.

使用Visual Studio 2012 Express时,我不得不添加其他包含项,以避免出现错误C2680:'FIX44 :: Logon&' :dynamic_cast的目标类型无效"以显示Visual Studio 2012 Express如何进行动态投射:

Working with Visual Studio 2012 Express I had to make an additional include in order to avoid "error C2680: 'FIX44::Logon &' : invalid target type for dynamic_cast" to show Visual Studio 2012 Express how to dynamic cast:

#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."

With this include, no compile time errors occur - but at run time, I get: "Microsoft C++ exception: std::bad_cast at memory location 0x02A0ED70."

据我所调试,显示的dynamic_cast语句是造成运行时错误的原因.

As far es I have debugged, the shown dynamic_cast statement is responsible for the runtime error.

我的问题是,如何解决此运行时错误并使用Visual Studio 2012 Express使用用户名和密码登录?

My question is, how could one go around this run time error and to login with Username and Password using Visual Studio 2012 Express?

推荐答案

您可以尝试这种方法,该方法在我的项目中使用过,并且像一种魅力:

You can try such approach, which is used in my project and works like a charm:

无效MarketApplication :: toAdmin(FIX :: Message& message,const FIX :: SessionID& sessionID) {

void MarketApplication::toAdmin(FIX::Message& message, const FIX::SessionID& sessionID) {

if (FIELD_GET_REF(message.getHeader(), MsgType) == FIX::MsgType_Logon)
{
    const FIX::Dictionary& session_settings = m_settings.get(sessionID);

    if (session_settings.has("TargetSubID"))
        message.setField(FIX::TargetSubID(session_settings.getString("TargetSubID")));

    if (session_settings.has("Username"))
        message.setField(FIX::Username(session_settings.getString("Username")));

    if (session_settings.has("Password"))
        message.setField(FIX::Password(session_settings.getString("Password")));
}

}

主要优点是您可以在会话配置中指定密码/登录,而无需任何硬编码

The main advantage is that you can specify password/login in session configuration avoiding any hardcode

这篇关于带有破解的login_message的quickfix bad_cast异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆