Я использую код в my.dll, это драйвер odbc: ...
__pfnDliFailureHook2 = DliErrorHook;<---exception
__pfnDliNotifyHook2 = DliErrorHook;
...
Я встроил его в VS2010, и он работал нормально.Но после того, как я перенес его в VS2017, я получаю
необработанное исключение в 0x000007FEDF4CBFB1 в odbcad32.exe: 0xC0000005: Место записи нарушения прав доступа 0x000007FEDF57DAC8.произошло
Я нашел этот интересный комментарий в delayimp.h:
/ Prior to Visual Studio 2015 Update 3, these hooks were non-const. They were
// made const to improve security (global, writable function pointers are bad).
// If for backwards compatibility you require the hooks to be writable, define
// the macro DELAYIMP_INSECURE_WRITABLE_HOOKS prior to including this header and
// provide your own non-const definition of the hooks.
ExternC
#ifndef DELAYIMP_INSECURE_WRITABLE_HOOKS
const
#endif
PfnDliHook __pfnDliNotifyHook2;
Но я не вижу, что можно изменить, чтобы заставить код работать?Макрос всегда определялся как записанный, что еще?
Я объявил в своем коде
PfnDliHook __pfnDliNotifyHook22;
PfnDliHook __pfnDliFailureHook22
и назначил указатель на функцию - все работает нормально.Но когда я пытаюсь назначить указатель функции на
extern PfnDliHook __pfnDliNotifyHook2;
extern PfnDliHook __pfnDliFailureHook2;
и, фактически, объявленный в delayimp.h, я получаю 0xC0000005: Место записи нарушения прав доступа