Я хочу спросить, есть ли способ обнаружить недостающую функцию в DLL, включенную в мое приложение, в то время как приложение запущено. Я знаю о возможности импортировать функцию manualy с помощью HMODULE и проверять ее при вызове этой функции, но я не хочу так решать каждый вызов функции. Идея состоит в том, чтобы покрыть вызов функции с помощью блока try-catch или что-то подобное, что не приводит к сбою приложения. Любые решения? Благодарю.Отсутствует обнаружение функции dll
1
A
ответ
0
Вы можете попробовать вызвать функцию, которая будет генерировать исключение EntryPointNotFoundException, если функция не существует. Например (VB.NET):
Dim MissingFunction as Boolean = False
Try
TheFunction()
Catch ex As System.EntryPointNotFoundException
MissingFunction = True
End Try
0
Согласно MSDN (https://msdn.microsoft.com/en-us/library/1c9e046h.aspx), в C/C++ с MSVC компилятором вы можете сделать что-то вроде этого:
#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. Обнаружение Отсутствует Метод
- 2. Msvcr71.dll Msvcp71.dll отсутствует
- 3. Обнаружение выгрузки DLL
- 4. Обнаружение MessageBox, созданных сторонними DLL
- 5. msvcp100.dll отсутствует
- 6. VCOMP100.dll отсутствует?
- 7. Отсутствует mingwm10.dll
- 8. ShakeGestures - .dll файл отсутствует
- 9. MSVCP100.dll отсутствует
- 10. Отсутствует проблема с DLL
- 11. MSVCP110.dll отсутствует
- 12. VCRUNTIME140.dll отсутствует
- 13. ATL100.DLL отсутствует
- 14. отсутствует Python34.dll
- 15. OpenCV - отсутствует DLL?
- 16. OpenCV highgui220.dll отсутствует
- 17. NHibernate - отсутствует DLL файлы
- 18. "opencv_core220.dll отсутствует"?
- 19. Отсутствует System.Reactive dll
- 20. MSVCP140.dll отсутствует
- 21. Webtest - отсутствует dll
- 22. dll отсутствует в JDBC
- 23. MSVCP110.dll отсутствует ошибка
- 24. SDL2.DLL отсутствует
- 25. Отсутствует msvcr80.dll
- 26. cudart64_80.dll отсутствует
- 27. Отсутствует libgcc_s_dw2-1.dll
- 28. Xalan DLL отсутствует
- 29. VCRUNTIME140.dll отсутствует?
- 30. "libgcc_s_sjlj-1.dll" отсутствует
Это обычно очень легко диагностировать, ваша программа не запустится. Поэтому нет смысла тестировать * пока * вы работаете, тот факт, что вы * работаете *, является достаточным доказательством того, что у вас нет проблемы :) –
Я забыл написать, что я использую задержку загрузки только из-за причины отсутствия -starting, поэтому моя программа запускает функцию if, а не сбой. – karfi
Есть ли какая-нибудь точка, чтобы не тестировать вашу программу вначале без/delayload ??? Как улавливать ошибки во время выполнения, в других случаях хорошо документировано в MSDN. –