Re: [Quickfix-users] QuickFIX functionality in a separate DLL
Brought to you by:
orenmnero
From: Grant B. <gbi...@co...> - 2011-06-09 16:18:45
|
I'm not a seasoned Visual C++ dev, but I'm trying to follow what you're trying to do here... I think you just have some code errors. It looks to me that the compile error is because you are declaring initiator as a full object. The compiler is trying to implicitly use the default constructor (no params), but FIX::SocketInitiator does not have one. Then your call to initiator()... well, it looks like a function, and the compiler can't find a function like that. Are you trying to call the constructor for initiator? My C++ is getting rusty, but one possibly memory-leaking approach that comes to mind is to declare initiator as a pointer to null (which won't call the constructor), then in the connect method you'll construct it and assign the pointer to it. There's probably better ways to do it in C++ (sorry my mind leans toward Java/C# style approaches right now), but I think you see where I'm going. -Grant On Sat, Jun 4, 2011 at 10:32 AM, Nigel Sperinck <nig...@gm...> wrote: > QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > > Hi, > > > > I am trying to place the QuickFIX functionality in a separate DLL which would be called from the main trading application. > > > > As a minimum for placing orders, the DLL would have the following exported functions: > > Connect() > > EnterOrder() > > Disconnect() > > > > Connect() would be called at the start of the trading day and would keep the QuickFIX session open. While this session is open, orders can be placed using EnterOrder(). At the end of the trading day, Disconnect() would call initiator.stop() and close the session. > > > > If the initiator and application objects are created in Connect(), then these would need to become class-level objects so as not to go out-of-scope when Connect() ends. > > > > Adapting the tradeclient sample to make both application and initiator as class-level objects causes two compile-time errors. > > > > If there a way to get this approach to work or otherwise a way to achieve the objective of a separate DLL where Connect() could keep the QuickFIX session open? > > > > I would be very grateful for any help. > > Nigel Sperinck > > > > // Define as Class-level objects > > Application application; > > FIX::SocketInitiator initiator; > > Causes compile-time error C2512: 'FIX::SocketInitiator' : no appropriate default constructor available > > > > __declspec(dllexport) void Connect() > > { > > std::string file = "C:\\tradeclient.cfg"; > > > > try > > { > > FIX::SessionSettings settings( file ); > > > > FIX::FileStoreFactory storeFactory( settings ); > > > > FIX::FileLogFactory logFactory( settings ); > > > > initiator( application, storeFactory, settings, logFactory ); > > Causes compile-time error C2064: term does not evaluate to a function taking 4 arguments > > > > initiator.start(); > > } > > catch ( std::exception & e ) > > { > > std::cout << e.what(); > > } > > } > > > > __declspec(dllexport) void Disconnect() > > { > > initiator.stop(); > > } > > > > __declspec(dllexport) void EnterOrder() > > { > > // In production, order details would be passed to this function > > application.queryEnterOrder(); > > } > > ------------------------------------------------------------------------------ > Simplify data backup and recovery for your virtual environment with vRanger. > Installation's a snap, and flexible recovery options mean your data is safe, > secure and there when you need it. Discover what all the cheering's about. > Get your free trial download today. > http://p.sf.net/sfu/quest-dev2dev2 > _______________________________________________ > Quickfix-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-users > > |