缺少dll函数检测

缺少dll函数检测,dll,import,Dll,Import,我想问,在应用程序运行时,是否有某种方法可以检测应用程序中包含的DLL中缺少的函数。我知道可以使用HMODULE手动导入函数,并在调用此函数时进行检查,但我不想以这种方式解决每个函数调用。想法是用一些try-catch块或类似的东西来覆盖函数调用,这不会导致应用程序崩溃。有什么解决办法吗?谢谢。您可以尝试调用该函数,如果该函数不存在,将生成EntryPointNotFoundException。例如(VB.NET): 根据MSDN(),在带有MSVC编译器的C/C++中,您可以执行以下操作: #

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

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

根据MSDN(),在带有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");
}
#包括
#定义设施\u VISUALCPP((长)0x6d)

#定义vcpException(sev,err)((sev)|(FACILITY|u visualcpp这通常很容易诊断,您的程序不会启动。因此在运行时没有测试点,您正在运行的事实足以证明您没有问题:)我忘了写我正在使用延迟加载只是因为不启动的原因,所以我的程序启动了一个if函数,而不是崩溃。在没有/delayload的情况下不首先测试你的程序有什么意义吗???如何捕获运行时错误在MSDN上有很好的文档记录。是的,这是一个学校项目,需要使用延迟加载。任务是:如何在应用程序运行时检测dll中包含的函数。
#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");
}