缺少dll功能检测

时间:2014-10-10 18:35:38

标签: dll import

我想问一下,当应用程序运行时,是否有某种方法可以检测我的应用程序中包含的DLL中的缺失函数。我知道使用HMODULE手动导入函数的可能性,并在调用此函数时检查它,但我不想以这种方式解决每个函数调用。想法是用一些try-catch块或类似的东西来覆盖函数调用,这不会导致应用程序崩溃。有解决方案吗感谢。

2 个答案:

答案 0 :(得分:1)

根据MSDN(https://msdn.microsoft.com/en-us/library/1c9e046h.aspx),在使用MSVC编译器的C / C ++中,您可以执行以下操作:

#include <windows.h>
#define FACILITY_VISUALCPP  ((LONG)0x6d)
#define VcppException(sev,err)  ((sev) | (FACILITY_VISUALCPP<<16) | err)
const DWORD LIB_NOT_FOUND = VcppException(ERROR_SEVERITY_ERROR, ERROR_MOD_NOT_FOUND);
const DWORD FUNC_NOT_FOUND = VcppException(ERROR_SEVERITY_ERROR, ERROR_PROC_NOT_FOUND);

__try
{
    MyDLLFunction();
}
__except(GetExceptionCode() == LIB_NOT_FOUND || GetExceptionCode() == FUNC_NOT_FOUND
         ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
{
    printf("library or function not found\n");
}

答案 1 :(得分:0)

您可以尝试调用该函数,如果该函数不存在,将生成EntryPointNotFoundException。例如(VB.NET):

Dim MissingFunction as Boolean = False
Try
    TheFunction()
Catch ex As System.EntryPointNotFoundException
    MissingFunction = True
End Try