GetProcAddress を呼び出す別の関数によって指定された FARPROC アドレスから関数インスタンスを返そうとしています。面白い問題が出てきました。関数は次のとおりです。
template<class FT>
std::function<FT> to_function(FARPROC address) {
return address;
}
後で、問題なく入力なし関数を作成します。
auto try1 = to_function<int()>(addr1);
ただし、関数が入力を受け取ると、Visual C++ 11 コンパイラが爆発します。
auto try2 = to_function<int(int)>(addr2);
それは正当に返します:
エラー C2197: 'int (__stdcall *)(void)': 呼び出しの引数が多すぎます
問題の型は、関数の引数リストに関係なく、GetProcAddress によって返されるものである FARPROC と同等です。
私の質問は、要するに、to_function の単純な関数プロトタイプを指定して、FARPROC を std::function の適切な型にキャストすることによって、この問題をどのように回避するかということです。事前に乾杯。