• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DLLをGetProcAddress()で実行できない。)

DLLをGetProcAddress()で実行できない

このQ&Aのポイント
  • dllの操作の練習中に、GetProcAddress()でDLLを実行できない問題が発生しています。
  • 解決策としては、インポートライブラリをリンクさせることでうまく動作することができます。
  • しかし、明示的にdllを呼び出そうとするとコンパイルエラーが発生し、「実引数が多すぎます」というメッセージが表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.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; }

参考URL:
http://usr_vogel.tripod.co.jp/
jimihenn
質問者

お礼

返信送れてすいません。 ありがとうございました。 おかげでうまくいきました。

関連するQ&A