QuickFIX is definitely designed for end-to-end. Some of its classes can be used for other purposes, but there is not much documentation for these less-common use-cases.
You can pass FIX strings into the Message
constructor.
// Uses default DataDictionary (e.g. message definitions from FIX spec)
Message::Message( const std::string& string, bool validate )
// Uses a DataDictionary that you supply.
// If your msg has custom fields, you need this one.
// (You'll create a DD from a custom msg definition XML file that
// you'll also need to create)
Message::Message( const std::string& string,
const DataDictionary& dataDictionary,
bool validate )
To convert that Message to a more specific type, you can feed it to a more-specific-type constructor, such as ExecutionReport(Message)
.
Have you considered QuickFIX/n, the native C# port?
This will work with QuickFIX/n:
IMessageFactory _defaultMsgFactory = new DefaultMessageFactory();
var dd = new QuickFix.DataDictionary.DataDictionary();
dd.Load("../../../spec/fix/FIX44.xml");
var msg = new QuickFix.FIX44.ExecutionReport();
msg.FromString(msg_string, false, dd, dd, _defaultMsgFactory);
If your XML has heavy customizations, you will probably want to regenerate source and rebuild the libraries first.