タイトルのとおり、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 )
だから、私の質問は、なぜそれが間違っているのですか?
関連: 私もこれを試しました: Function pointer to multiple argument C++11 std::function: Templating GetProcAddress しかし、コンパイルにも失敗しました ( https://godbolt.org/z/1wSDZj )
次のトピックも見つけました: C ++ DLL から任意の関数を std::function に動的にロードし ます。巨大なボイラープレートを探す必要があります。
ノート:
- 明らかに、0xDEADBEEF は必要なアドレスに置き換えられます。
- 私はVisual Studio 2019を使用してコンパイルしていますが、明らかに一般的な回答は大歓迎です