代码之家  ›  专栏  ›  技术社区  ›  feal87

在启动时避免P/Invoke错误

  •  0
  • feal87  · 技术社区  · 16 年前

    例如,目前我正试图在启动时通过LoadLibrary加载各种DLL,并测试它们是否导出了特定的函数。

    如果我在应用程序完成其加载过程时执行此操作,则不会给出任何错误(只是结果为0,我可以通过GetLastError进行检查),如果我在启动时执行此操作(例如表单的加载事件),则会抛出错误(例如缺少模块等)。

    请注意,这些都不是例外,但系统MessageBox和try…catch在这里不起作用。

    谢谢

    3 回复  |  直到 16 年前
        1
  •  1
  •   Hans Passant    16 年前

    调用LoadLibrary()时会看到消息框,这没有多大意义。查看P/Invoking SetErrorMode() 使用SEM_NOOPENFILEERRORBOX解决您的问题。使用Showed而不是Load事件也值得一试。

        2
  •  0
  •   Ants    16 年前

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

        3
  •  0
  •   Fadrian Sudaman    16 年前

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

        Application.ThreadException
        AppDomain.CurrentDomain.UnhandledException