我正在从DLL调用函数,如下所示:
__declspec ( dllimport ) bool dll_function(...);
int main() {
[...]
if (dll_function(...)) {
[...]
}
}
在某些情况下,我传递给DLL函数的数据将导致DLL崩溃。有可能捕获这个,所以我的应用程序也不会崩溃(不修改不是由我创建的DLL)?
答案 0 :(得分:4)
您可以使用MSVC编译器中的__try和__except关键字捕获AV。并非所有这些都有用,你不知道造成了什么样的伤害。您的程序状态可能已损坏。例如,堆可能会被烧毁,从而导致随后的随机故障。在自己的进程中托管DLL并使用IPC与它进行通信是唯一不错的方法。
答案 1 :(得分:2)
在某些情况下,我传递给的数据 DLL函数会导致崩溃 DLL。是否有可能抓住这一点 所以我的应用程序不会崩溃 好?
如果只调用具有有效数据的函数,是否可以防止dll崩溃?在任何情况下,这应该是最好的解决方案 - 但在不知道你想要使用哪个DLL的情况下很难分辨。但在大多数情况下,您应该知道“数据”究竟会导致崩溃......
答案 2 :(得分:1)
试着看看:
http://msdn.microsoft.com/en-us/library/ms680634%28v=vs.85%29.aspx
和
Oleg Starodumov(www.debuginfo.com)强制执行过滤器代码
http://www.debuginfo.com/articles/debugfilters.html
但是,这是一个顶级过滤器而不是try / catch。您也许可以重新启动您的流程。
您可能需要使用__try进行例外处理。再次,可能更好地解决问题或只是崩溃而不是试图抓住它。 我同意其他人的意见,而不是压制或隐藏崩溃,你应该修复它。我不知道你能从崩溃中恢复得多好 - 在这样的事情之后继续执行会有用吗?
答案 3 :(得分:0)
我不确定这是否是问题,请尝试指定正确的调用约定。 (__stdcall
,__cdecl
等)。
如果这不是问题,我们需要查看您传递给函数的内容以及可能的函数代码(如果有的话)。