我有一个原生的C ++应用程序(没有花哨的.Net东西只是C ++)。但是它通过混合模式包装器DLL文件使用一些可选的.Net程序集。使用延迟加载来加载这些dll。使用混合模式包装器时,需要完全信任它们才能加载。因此,当应用程序尝试使用dll时,如果它不存在或者它不受信任,则整个事情会因错误的错误消息而崩溃。
但我的情况是,只要我的主要应用程序涉及它可以没有这些DLL文件。所以我需要一种方法来检查这些dll是否可以加载(文件在那里并且是可信的)。为了做到这一点,我尝试对try catch块中的一个dll函数进行虚拟调用,希望捕获异常,但它仍然会因“找不到模块”异常而崩溃。
我们还尝试用自定义的异常过滤器替换无法使用的异常过滤器,但仍然没有运气。
我们还尝试使用LoadLibrary方法首先加载dll并检查返回值。 但该函数加载Dll,即使它不受信任,但在我们尝试进行方法调用时崩溃。
我不认为这是一个未解决的问题。检查是否可以使用dll而不实际尝试加载它并最终崩溃有多难?有什么想法吗?
答案 0 :(得分:1)
如果所有方法都失败了,请尝试运行一个单独的进程(即简单的命令行应用程序),该进程将尝试加载库,然后分析其返回代码。
但是,您是否尝试过结构化异常处理 - 即__try / __ catch,而不是尝试/ catch?请参阅here。
答案 1 :(得分:0)
我有一个想法是先使用一个单独的进程来测试dll,然后查看它是否存在任何错误。我不想在我的应用程序中使用它,因为它不是真正的战队解决方案。但__try,__ except方法适用于延迟加载dll调用。我甚至不必使用LoadLibrary。感谢。