- ベストアンサー
DLLをGetProcAddress()で実行できない
- dllの操作の練習中に、GetProcAddress()でDLLを実行できない問題が発生しています。
- 解決策としては、インポートライブラリをリンクさせることでうまく動作することができます。
- しかし、明示的にdllを呼び出そうとするとコンパイルエラーが発生し、「実引数が多すぎます」というメッセージが表示されます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
FARPROC は恐らく int (__stdcall *)(void) と定義されていて引数を受け取らず int を戻り値として返す関数へのポインタを意味しているのでしょう。 関数 ADD のプロトタイプでは、 void CALLBACK ADD(HWND hwnd,int a, int b); と宣言されていますから、この関数のポインタを受けとって使用するには関数のポインタを受け取る変数を FARPROC にするのではなく、 void ( *func )( HWND, int, int ); というふうに宣言して、 func = GetProcAddress( LoadLibrary( TEXT( "add.dll" ) ) , TEXT( "ADD" ) ); func( hWnd, 5, 5 ); と、使用してやれば上手くいくと思います。 また、引数に HWND と int と int を取り、戻り値を返さない関数へのポインタ変数の宣言は冗長になるので以下のように宣言することも出来ます。 typedef void ( *DLLFUNC )( HWND, int, int ); DLLFUNC func; func = GetProcAddress( LoadLibrary( TEXT( "add.dll" ) ) , TEXT( "ADD" ) ); func( hWnd, 5, 5 ); 関数のポインタについては検索エンジンなどで調べてみてください。 以下、例です。 #include <stdio.h> typedef void ( *FUNC )( int, int ); void func( int hoge, int piyo ){ printf( "%d, %d", hoge, piyo ); } int main(void){ FUNC fn; fn = func; fn( 23, 43 ); return 0; }
お礼
返信送れてすいません。 ありがとうございました。 おかげでうまくいきました。