Within my windows app, i'm using a c++ DLL wrapped with a .NET DLLs (specifically - the quickfix engine). While running, once every day (not at any specific time), in one of the a constructor of one of the built-in classes throws a runtime error. Even though the error is caught and reported (to a log file, and the database), I still get the windows 'runtime error' dialog (which offers no recovery/debugging options) and after pressing the 'ok' button (the only one available) my app is terminated.
This happens when running in Debug, Release and even while running within the VS2005 debugger itself.
As a side-note, I have compiled the above-mentioned DLLs locally (since at least one of them includes auto-generated code based on an XML specification).
Anyone? (details follow)
My code:
try
{
QuickFix.Symbol Symbol = new QuickFix.Symbol();
report.get(Symbol);
PairsType instrument = ToPairType(Symbol.getValue());
if (PairsType.NONE == instrument)
return;
QuickFix.MDEntryDate entryDate = new MDEntryDate();
QuickFix.MDEntryTime entryTime = new MDEntryTime();
QuickFix.QuoteCondition quoteCondition = new QuoteCondition();
QuickFix.MDEntryPx MDEntryPxBid = new QuickFix.MDEntryPx();
QuickFix.MDEntryPx MDEntryPxAsk = new QuickFix.MDEntryPx();
QuickFix.NoMDEntries noMDEntries = new QuickFix.NoMDEntries();
report.get(noMDEntries);
for (uint i = 1; i <= noMDEntries.getValue(); ++i)
{
QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries group =
new QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries();
report.getGroup(i, group);
if (group.isSetQuoteCondition())
group.get(quoteCondition);
if (group.isSetMDEntryDate())
group.get(entryDate);
if (group.isSetMDEntryTime())
group.get(entryTime);
switch (group.getMDEntryType().getValue())
{
case MDEntryType.BID:
group.get(MDEntryPxBid);
break;
case MDEntryType.OFFER:
group.get(MDEntryPxAsk);
break;
}
}
// use data...
}
catch (Exception e)
{
// log the error
}
Error details: Message: External component has thrown an exception Stack trace:
at FIX.message_order.=(message_order* , message_order* )
at std._Tree_nod<std::_Tmap_traits<int,FIX::FieldBase,FIX::message_order,std::allocator<std::pair<int const ,FIX::FieldBase> >,1> >.{ctor}(_Tree_nod<std::_Tmap_traits<int\,FIX::FieldBase\,FIX::message_order\,std::allocator<std::pair<int const \,FIX::FieldBase> >\,1> >* , message_order* _Parg, allocator<std::pair<int const \,FIX::FieldBase> >* _Al)
at std._Tree<std::_Tmap_traits<int,FIX::FieldBase,FIX::message_order,std::allocator<std::pair<int const ,FIX::FieldBase> >,1> >.{ctor}(_Tree<std::_Tmap_traits<int\,FIX::FieldBase\,FIX::message_order\,std::allocator<std::pair<int const \,FIX::FieldBase> >\,1> >* , message_order* _Parg, allocator<std::pair<int const \,FIX::FieldBase> >* _Al)
at FIX.FieldMap.{ctor}(FieldMap* , Int32* order)
at QuickFix.Group..ctor(Int32 field, Int32 delim, Int32[] message_order)
at QuickFix44.MarketDataSnapshotFullRefresh.NoMDEntries..ctor()
at PriceProviders.PriceProvider.onMarketDataRefresh(FixSession session, MarketDataSnapshotFullRefresh report)