Thread: Error in Exceptions.h file during build of QuickFix library

  1. #1
    Registered User
    Join Date
    May 2010
    Posts
    14

    Error in Exceptions.h file during build of QuickFix library

    Hi
    I am in the process of learning FIX protocol using QuickFix, I am following the example which is given in the documentation,however I am getting an error during build in one file which is part of the quickfix header file.

    Can anyone please let me know if I am missing anything in my project configuration. Just as an FYI I did follow all the instruction in quickfix website to set up a C++ project.

    Regards
    Arup

    Error:
    ---------------------
    Code:
    1>c:\project\quickfix\quickfix_c\quickfix\include\quickfix\exceptions.h(260) : error C2664: 'FormatMessageW' : cannot convert parameter 5 from 'char [2048]' to 'LPWSTR'
    1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Code of Exceptions.h. The error is in line 260 which is as follows:

    Code:
    #ifdef _MSC_VER
        error = WSAGetLastError();
        char buffer[2048];
        FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, error,
                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                       buffer, 2048, NULL );
        return buffer;
    #else
    Exceptions.h
    Code:
    /* -*- C++ -*- */
    
    /****************************************************************************
    ** Copyright (c) quickfixengine.org  All rights reserved.
    **
    ** This file is part of the QuickFIX FIX Engine
    **
    ** This file may be distributed under the terms of the quickfixengine.org
    ** license as defined by quickfixengine.org and appearing in the file
    ** LICENSE included in the packaging of this file.
    **
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    **
    ** See http://www.quickfixengine.org/LICENSE for licensing information.
    **
    ** Contact [email protected] if any conditions of this licensing are
    ** not clear to you.
    **
    ****************************************************************************/
    
    #ifndef FIX_EXCEPTIONS_H
    #define FIX_EXCEPTIONS_H
    
    #include <string>
    #include <stdexcept>
    #include "Utility.h"
    
    namespace FIX
    {
    
    /// Base QuickFIX exception type.
    struct Exception : public std::logic_error
    {
      Exception( const std::string& t, const std::string& d )
      : std::logic_error( d.size() ? t + ": " + d : t ),
        type( t ), detail( d )
      {}
      ~Exception() throw() {}
    
      std::string type;
      std::string detail;
    };
    
    /// DataDictionary not found for BeginString or ApplVerID
    struct DataDictionaryNotFound : public Exception
    {
      DataDictionaryNotFound( const std::string& v, const std::string& what = "" )
        : Exception( "Could not find data dictionary", what ),
                     version( v ) {}
      ~DataDictionaryNotFound() throw() {}
    
      std::string version;
    };
    
    /// Field not found inside a message
    struct FieldNotFound : public Exception
    {
      FieldNotFound( int f = 0, const std::string& what = "" )
        : Exception( "Field not found", what ),
                     field( f ) {}
      int field;
    };
    
    /// Unable to convert field into its native format
    struct FieldConvertError : public Exception
    {
      FieldConvertError( const std::string& what = "" )
        : Exception( "Could not convert field", what ) {}
    };
    
    /// Unable to parse message
    struct MessageParseError : public Exception
    {
      MessageParseError( const std::string& what = "" )
        : Exception( "Could not parse message", what ) {}
    };
    
    /// Not a recognizable message
    struct InvalidMessage : public Exception
    {
      InvalidMessage( const std::string& what = "" )
        : Exception( "Invalid message", what ) {}
    };
    
    /// %Application is not configured correctly
    struct ConfigError : public Exception
    {
      ConfigError( const std::string& what = "" )
        : Exception( "Configuration failed", what ) {}
    };
    
    /// %Application encountered serious error during runtime
    struct RuntimeError : public Exception
    {
      RuntimeError( const std::string& what = "" )
        : Exception( "Runtime error", what ) {}
    };
    
    /// Tag number does not exist in specification
    struct InvalidTagNumber : public Exception
    {
      InvalidTagNumber( int f = 0, const std::string& what = "" )
        : Exception( "Invalid tag number", what ),
                     field( f ) {}
      int field;
    };
    
    /// Required field is not in message
    struct RequiredTagMissing : public Exception
    {
      RequiredTagMissing( int f = 0, const std::string& what = "" )
        : Exception( "Required tag missing", what ),
                     field( f ) {}
      int field;
    };
    
    /// Field does not belong to message
    struct TagNotDefinedForMessage : public Exception
    {
      TagNotDefinedForMessage( int f = 0, const std::string& what = "" )
        : Exception( "Tag not defined for this message type", what ),
                     field( f ) {}
      int field;
    };
    
    /// Field exists in message without a value
    struct NoTagValue : public Exception
    {
      NoTagValue( int f = 0, const std::string& what = "" )
        : Exception( "Tag specified without a value", what ),
                     field( f ) {}
      int field;
    };
    
    /// Field has a value that is out of range
    struct IncorrectTagValue : public Exception
    {
      IncorrectTagValue( int f = 0, const std::string& what = "" )
        : Exception( "Value is incorrect (out of range) for this tag", what ),
                     field( f ) {}
      int field;
    };
    
    /// Field has a badly formatted value
    struct IncorrectDataFormat : public Exception
    {
      IncorrectDataFormat( int f = 0, const std::string& what = "" )
        : Exception( "Incorrect data format for value", what ),
                     field( f ) {}
      int field;
    };
    
    /// Message is not structured correctly
    struct IncorrectMessageStructure : public Exception
    {
      IncorrectMessageStructure( const std::string& what = "" )
        : Exception( "Incorrect message structure", what ) {}
    };
    
    /// Field shows up twice in the message
    struct DuplicateFieldNumber : public Exception
    {
      DuplicateFieldNumber( const std::string& what = "" )
        : Exception( "Duplicate field number", what ) {}
    };
    
    /// Not a known message type
    struct InvalidMessageType : public Exception
    {
      InvalidMessageType( const std::string& what = "" )
        : Exception( "Invalid Message Type", what ) {}
    };
    
    /// Message type not supported by application
    struct UnsupportedMessageType : public Exception
    {
      UnsupportedMessageType( const std::string& what = "" )
        : Exception( "Unsupported Message Type", what ) {}
    };
    
    /// Version of %FIX is not supported
    struct UnsupportedVersion : public Exception
    {
      UnsupportedVersion( const std::string& what = "" )
        : Exception( "Unsupported Version", what ) {}
    };
    
    /// Tag is not in the correct order
    struct TagOutOfOrder : public Exception
    {
      TagOutOfOrder( int f = 0, const std::string& what = "" )
        : Exception( "Tag specified out of required order", what ),
                     field( f ) {}
      int field;
    };
    
    /// Repeated tag not part of repeating group
    struct RepeatedTag : public Exception
    {
      RepeatedTag( int f = 0, const std::string& what = "" )
        : Exception( "Repeated tag not part of repeating group", what ),
                     field( f ) {}
      int field;
    };
    
    /// Repeated group count not equal to actual count
    struct RepeatingGroupCountMismatch : public Exception
    {
      RepeatingGroupCountMismatch( int f = 0, const std::string& what = "" )
        : Exception( "Repeating group count mismatch", what ),
                     field( f ) {}
      int field;
    };
    
    /// Indicates user does not want to send a message
    struct DoNotSend : public Exception
    {
      DoNotSend( const std::string& what = "" )
        : Exception( "Do Not Send Message", what ) {}
    };
    
    /// User wants to reject permission to logon
    struct RejectLogon : public Exception
    {
      RejectLogon( const std::string& what = "" )
        : Exception( "Rejected Logon Attempt", what ) {}
    };
    
    /// Session cannot be found for specified action
    struct SessionNotFound : public Exception
    {
      SessionNotFound( const std::string& what = "" )
        : Exception( "Session Not Found", what ) {}
    };
    
    /// IO Error
    struct IOException : public Exception
    {
      IOException( const std::string& what = "" )
        : Exception( "IO Error", what ) {}
    };
    
    /// Socket Error
    struct SocketException : public Exception
    {
      SocketException()
        : Exception( "Socket Error", errorToWhat() ) {}
    
      SocketException( const std::string& what )
        : Exception( "Socket Error", what ) {}
    
      std::string errorToWhat()
      {
    #ifdef _MSC_VER
        error = WSAGetLastError();
        char buffer[2048];
        FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, error,
                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                       buffer, 2048, NULL );
        return buffer;
    #else
        error = errno;
        return strerror( error );
    #endif
      }
    
      int error;
    };
    
    /// Socket send operation failed
    struct SocketSendFailed : public SocketException
    {
      SocketSendFailed() {}
      SocketSendFailed( const std::string& what )
        : SocketException( what ) {}
    };
    
    /// Socket recv operation failed
    struct SocketRecvFailed : public SocketException
    {
      SocketRecvFailed( int size )
        : SocketException( size == 0 ? "Connection reset by peer." : size < 0 ? errorToWhat() : "Success." ) {}
      SocketRecvFailed( const std::string& what )
        : SocketException( what ) {}
    };
    
    /// Socket close operation failed
    struct SocketCloseFailed : public SocketException
    {
      SocketCloseFailed() {}
      SocketCloseFailed( const std::string& what )
        : SocketException( what ) {}
    };
    
    /*! @} */
    }
    
    #endif //FIX_EXCEPTIONS_H

  2. #2
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,660
    Two things

    a) setup your project so that UNICODE is disabled in the build.

    b) send them a bug report to show them that error message, and show them that disabling UNICODE fixes the problem.
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  3. #3
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    Indeed. They should be using FormatMessageA.
    You can choose what "character set" to use in project options. Use multi-byte or none.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  4. #4
    Registered User
    Join Date
    May 2010
    Posts
    14
    Please mark this thread as resolved. I set the character set to "Not Set". It solved the building errors.

    I would like to thank everyone for helping me out.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Memory Leak in AppWizard-Generated Code
    By jrohde in forum Windows Programming
    Replies: 4
    Last Post: 05-19-2010, 04:24 PM
  2. How to build, run Boland C++ 6 source file via VS2005?
    By userpingz in forum C++ Programming
    Replies: 2
    Last Post: 05-21-2009, 03:25 AM
  3. Formatting a text file...
    By dagorsul in forum C Programming
    Replies: 12
    Last Post: 05-02-2008, 03:53 AM
  4. Formatting the contents of a text file
    By dagorsul in forum C++ Programming
    Replies: 2
    Last Post: 04-29-2008, 12:36 PM
  5. Simple File encryption
    By caroundw5h in forum C Programming
    Replies: 2
    Last Post: 10-13-2004, 10:51 PM