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