gpt4 book ai didi

.net - DLL运行时错误使我的C#应用​​程序崩溃-如何避免它?

转载 作者:行者123 更新时间:2023-12-03 09:08:40 35 4
gpt4 key购买 nike

在我的Windows应用程序中,我使用的是包裹有.NET DLL的c++ DLL(特别是-quickfix引擎)。
在运行时,每天一次(不是在任何特定时间)一次,在一个内置类之一的构造函数中抛出运行时错误。
即使错误被捕获并报告(记录到日志文件和数据库中),我仍然会得到Windows“运行时错误”对话框(不提供恢复/调试选项),并且在按下“确定”按钮后(唯一一个) (可用)我的应用终止了。

在Debug,Release中运行,甚至在VS2005调试器本身中运行时,都会发生这种情况。

作为附带说明,我已经在本地编译了上述DLL(因为其中至少有一个包含基于XML规范的自动生成的代码)。

任何人? (详情如下)

我的代码:

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
}

错误详情:
消息:外部组件引发了异常
堆栈跟踪:
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)

最佳答案

您可以在单独的AppDomain中加载QuickFix DLL。这样可以保护您的应用程序免于意外终止。

您可以测试从主程序终止的应用程序域,并在需要时重新加载它。

应用程式网域

http://msdn.microsoft.com/en-us/library/system.appdomain.aspx

有关使用它们构建应用程序的更多信息

http://msdn.microsoft.com/en-us/library/yk22e11a(VS.71).aspx

我假设您没有访问C++代码的权限。 ck ..多么讨厌的“石膏”修复。

关于.net - DLL运行时错误使我的C#应用​​程序崩溃-如何避免它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1163970/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com