Как и в заголовке, я хотел бы преобразовать GetProcAddress в std :: function. Да, при переполнении стека существует несколько решений, но ни одно из них не объясняет, почему эти обходные пути необходимы. Я не могу понять точное сообщение об ошибке и почему это происходит. Источник выборки прост:
#include <functional>
#include <Windows.h>
using fn_NtAllocateVirtualMemory = NTSTATUS (NTAPI*)(
HANDLE ProcessHandle,
PVOID* BaseAddress,
ULONG_PTR ZeroBits,
PSIZE_T RegionSize,
ULONG AllocationType,
ULONG Protect
);
int main()
{
std::function<fn_NtAllocateVirtualMemory> myFn(reinterpret_cast<fn_NtAllocateVirtualMemory>(0xDEADBABE));
}
(https://godbolt.org/z/FhaeLA)
Итак, мой вопрос: почему это неправильно?
Связанный:
Я также попробовал это:
Указатель на функцию с несколькими аргументами C ++ 11 std :: function: Templating GetProcAddress
Но также не удалось скомпилировать (https://godbolt.org/z/1wSDZj)
Я также нашел эту тему:
C ++ Динамически загружать произвольную функцию из DLL в std :: function
Что может сработать (я еще не пробовал, скоро сделаю) , но я пытаюсь понять, зачем нужен такой загадочный огромный шаблон.
Примечания:
- Очевидно, что 0xDEADBEEF будет заменен на необходимый адрес.
- Я использую Visual Studio 2019 для компиляции, но, очевидно, приветствуется любой общий ответ