在启动时避免P / Invoke错误

时间:2010-02-28 09:02:25

标签: c# windows winapi pinvoke winforms

似乎在App未完成加载时调用P-Invoke会使其显示相关函数的错误。

例如,目前我正在尝试通过LoadLibrary在启动时加载各种DLL并测试它们是否已导出特定功能。

如果我在应用程序完成其加载过程时这样做,则没有给出错误(只是结果是0并且我可以通过GetLastError检查它们),如果我在启动时执行它(例如表单的Load事件)它会发出错误(例如缺少模块等)。

有一种方法可以将这些错误静音吗?

请注意,这些不是例外,但系统消息框和try ... catch在这里不起作用。

感谢。

3 个答案:

答案 0 :(得分:1)

从调用LoadLibrary()看到消息框并没有多大意义。看看P / Invoking SetErrorMode()与SEM_NOOPENFILEERRORBOX是否解决了您的问题。使用Shown而不是Load事件也值得一试。

答案 1 :(得分:0)

如果要检测/测试各种DLL有特定的入口点,请使用GetProcAddress()API。如果GetProcAddress()为特定入口点返回0,则该DLL中不存在该入口点。

答案 2 :(得分:0)

我没有尝试的代码,但我觉得你得到一个消息框,因为异常被抛出在一个单独的线程中,而不是由你的try和catch块处理。您可以尝试在应用程序开始时连接这两个事件,并尝试查看此处的事件处理程序是否捕获到异常。

    Application.ThreadException
    AppDomain.CurrentDomain.UnhandledException