2

我有一个本机 C++ 应用程序(没有花哨的 .Net 东西,只有 C++)。但是,它通过混合模式包装 dll 文件使用一些可选的 .Net 程序集。这些 dll 使用延迟加载加载。混合模式包装器的事情是它们需要完全信任才能加载。因此,当应用程序尝试使用该 dll 时,如果它不存在或者它不受信任,那么整个事情就会崩溃并出现令人讨厌的错误消息。

但我的情况是,只要我的主要应用程序担心它可以在没有这些 dll 文件的情况下生存。所以我需要一种方法来检查这些 dll 是否可以加载(文件在那里并且受信任)。为了做到这一点,我尝试在 try catch 块中对其中一个 dll 函数进行虚拟调用,希望捕获异常,但它仍然因“找不到模块”异常而崩溃。

我们还尝试用自定义的异常过滤器替换未经处理的异常过滤器,但仍然没有运气。

我们还尝试使用 LoadLibrary 方法首先加载 dll 并检查返回值。但是,即使它不受信任,该函数也会加载 Dll,但当我们尝试进行方法调用时会崩溃。

我不认为这是一个未解决的问题。在不实际尝试加载并最终崩溃的情况下检查 dll 是否可以使用有多难?有任何想法吗?

4

2 回答 2

1

如果所有方法都失败,请尝试运行一个单独的进程(即简单的命令行应用程序)来尝试加载库,然后分析其返回代码。

但是,您是否尝试过结构化异常处理——即 __try/__catch,而不是 try/catch?见这里

于 2009-10-22T19:46:11.410 回答
0

我有一个想法,首先使用一个单独的进程来测试 dll,看看它是否遇到任何错误。我不想在我的应用程序中使用它,因为它不是一个真正的氏族解决方案。但是 __try, __except 方法适用于延迟加载 dll 调用。我什至不必使用 LoadLibrary。谢谢。

于 2009-10-24T13:49:55.963 回答