Использование отложенных загрузок dll-хуков в VS2017 - PullRequest
0 голосов
/ 06 февраля 2019

Я использую код в 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: Место записи нарушения прав доступа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...