检测从.NET调用的调用dll的崩溃

时间:2013-06-04 13:38:37

标签: .net delphi pinvoke dllimport invoke

我从.NET应用程序调用了一些本机dll(Delphi)。 如果DLL中发生任何类型的崩溃,则整个.NET应用程序崩溃。如何防止这种情况并确保.NET应用程序不会崩溃并识别错误。我不需要来自本机dll的特定错误反馈(这是不可能的,因为它崩溃了)。但我想写一些东西给我的.NET日志文件,比如“xyz.dll崩溃”。

这是否可以从.NET中调用(Delphi或C ++)dll?

2 个答案:

答案 0 :(得分:3)

Delphi DLL中的所有入口点必须放在try ... except块中,并向.NET端返回一个值(int),指示调用是否有错误。

答案 1 :(得分:3)

如果你的DLL从导出的函数中抛出异常,就会发生这种情况。 DLL不能这样做,所以你需要捕获DLL边界的所有异常,并将它们转换为错误代码返回值。

如果您无法控制DLL,则需要为其编写包装层。创建另一个本机DLL,它调用原始DLL并捕获它抛出的任何异常。您可以使用我怀疑的另一个Delphi DLL执行此操作,或者使用使用SEH来捕获异常的C或C ++ DLL。

可以为这样的包装DLL编写代码生成的脚本。如果你需要包装很多函数,你会想要这样做。