【问题标题】:How Do Exceptions Work When Using DLLImport使用 DLLImport 时异常如何工作
【发布时间】:2012-04-29 10:03:53
【问题描述】:

我正在使用 DLLImport 从 C# 应用程序调用 GhostScript 库。

所以我有一些这样的代码,

[DllImport("gsdll32.dll", EntryPoint = "gsapi_init_with_args")]
private static extern int gsapi_init_with_args(IntPtr instance, int argc, IntPtr argv);

try 
{ 
    intReturn = gsapi_init_with_args(intGSInstanceHandle, intElementCount, intptrArgs); 
}
catch (Exception ex)
{
    throw new ApplicationException(ex.Message, ex);
}

我将查看 GhostScript 源代码,它是用 C 或 C++ 编写的,但总的来说,我想知道如果 GhostScript 代码抛出未处理的异常会发生什么?那会被那里的渔获物抓住吗,还是必须看起来像这样,

catch
{
    // blah
}

【问题讨论】:

  • 这是 .NET 4.0 是的。不过我想知道,在这种情况下,这个问题可能有点毫无意义。我看到 GhostScript 是用 C 编写的,所以它不应该抛出任何异常,对吧?无论如何,最好知道 catch 对 C++ 异常有什么作用。
  • 即使dll不可以,操作系统也可以抛出异常。
  • 我正在使用不同的 dll,并且在过去的 catch (Exception e) 上引发了异常问题,尽管 Microsoft 表示应该可以。 msdn.microsoft.com/en-us/library/ms404228(v=vs.100).aspx

标签: c# c++ exception


【解决方案1】:

它不会抛出异常,您应该查看返回码。 http://pages.cs.wisc.edu/~ghost/doc/AFPL/7.04/API.htm#return_codes

非常标准的 C 编程方法,错误返回非零代码,有时随后调用第二个 API 以检索错误的更多详细信息。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2018-12-07
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多