掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
動的DLL呼び出しで、コールバック関数を送るには? (ID:13046)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
(たぶん)VC++で書かれたDLLを動的にロードし、DLL内の関数に コールバック関数を登録したいのですが、うまく行かないので ご教授お願いします。 DLLのヘッダ /* * int CALLBACK fncCallBack(unsigned long dwReason, unsigned long wParam, unsigned long lParam, void *uParam, unsigned long *errCode) */ typedef int (CALLBACK *func_CallBack)(unsigned long, unsigned long, unsigned long, void *, unsigned long *); typedef int (WINAPI *func_Init)(func_CallBack, void *, unsigned long, unsigned long *); そこで、以下の通りのコードで試してみたのですが、特権命令違反が出てうまくいきません。 type pLongword = ^Longword; TCallBack = function (dwReason, wParam, lParam: longword; uParam: Pointer; errCode: plongword): Integer; function dllCallBack(dwReason, wParam, lParam: longword; uParam: Pointer; errCode: plongword): Integer; stdcall; implementation procedure TForm1.Button1Click(Sender: TObject); type TDllInit = function(func_CallBack: TCallBack; Value: Pointer; Option, ErrCode: pLongword): integer; var hLibrary: THandle; dllInit: TDllInit; ErrCode: longword; begin Memo1.Text := ''; hLibrary := LoadLibrary('hoge.dll'); if hLibrary <> 0 then begin @dllInit := GetProcAddress(hLibrary, 'fncInit'); if @dllInit <> nil then begin try dllInit(@dllCallBack, @Memo1, 0, @ErrCode); //この行でエラー Memo1.Text := Memo1.Text + IntToStr(ErrCode); except on E: Exception do begin Memo1.Text := e.Message; FreeLibrary(hLibrary); exit; end; end; end else begin ShowMessage('関数がない'); end; end else begin ShowMessage('NotDLL'); end; end; function dllCallBack(dwReason, wParam, lParam: longword; uParam: Pointer; errCode: plongword): Integer; stdcall; begin result := 0; if uParam = nil then exit; TMemo(uParam).Text := 'コールバック!!'; end; 環境は以下の通りです。 OS:WinXP SP2 Delphi: Delphi 2005 Pro(Delphi for Win32プロジェクト)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.