ホームページ > コンピューターのチュートリアル > コンピュータ知識 > ネストされた DLL でコールバック関数を呼び出すにはどうすればよいですか?

ネストされた DLL でコールバック関数を呼び出すにはどうすればよいですか?

WBOY
リリース: 2024-01-20 08:27:16
転載
1023 人が閲覧しました

ネストされた DLL でコールバック関数を呼び出すにはどうすればよいですか?

ネストされた DLL でコールバック関数を呼び出す方法

HMODULE hModelHand = LoadLibrary(__T("MyDLL.DLL"));

SetLog pLogShowFun = (SetLog)GetProcAddress(hModelHand, MYTESTFUN);

{ if (NULL == pLogShowFun)

AfxMessageBox(__T("mydll.dll アドレスを取得できません!"));

}

pLogShowFun((writeLog *)(Mylog::writelog));1234567891011

DLLでの操作

#MyDLL_API extern "C" __declspec( dllexport )

を定義します。

typedef void(*writeLog)(const char *plogFile, int p_nType, const char * logText);

writeLog g_RunLog = NULL;

MyDLL_API void mytestfun(void *pfun)

{ if (pfun)

{

g_RunLog = (writeLog)pfun;

}

}

C コールバック関数の実装方法を説明する

C# コールバック関数とは何ですか? C# コールバック関数は、Windows システム DLL またはその他の DLL によって呼び出されるアプリケーションによって提供される関数であり、通常、メッセージのインターセプト、システム情報の取得、または非同期イベントの処理に使用されます。アプリケーションは DLL にコールバック関数のアドレス ポインターを伝え、DLL は適切なタイミングで関数を呼び出します。コールバック関数は、事前に指定されたパラメータの形式と配信方法に準拠している必要があります。準拠していないと、DLL がコールバック関数を呼び出すとすぐにプログラムまたはシステムがクラッシュします。通常、コールバック関数は Windows API の標準呼び出しメソッドである __stdcall を使用しますが、DLL コンパイラ自身で呼び出しメソッドを定義することももちろん可能ですが、クライアントプログラムも同様の規定に従う必要があります。 __stdcall モードでは、関数のパラメータは右から左の順序でスタックにプッシュされます。ポインタまたは参照として明示的に指定されない限り、パラメータは値によって渡されます。スタックからパラメータをポップするのはユーザーの責任です。関数が戻る前に。 C# コールバック関数を理解しましょう。プログラムが関数 (通常 API と呼ばれる) を呼び出すことは、プログラムが関数を呼び出すことと等価であり、その関係は次のように表されます。

プログラム--------------------→dll

プログラムが関数を呼び出すとき、プログラムはそれ自身の関数のアドレスをパラメータとしてプログラムによって呼び出される関数に渡します (そのとき、その独自の関数はコールバック関数と呼ばれます)。コールバック関数を必要とする DLL 関数は、多くの場合、繰り返し実行する必要があり、演算の機能と関係は次のように表されます: call (call)

callback (コールバック) 呼び出した関数が戻り値をコールバック関数に渡すと、コールバック関数を使用して特定の操作を処理または完了できます。独自のコールバック関数を定義する方法については、使用する特定の API 関数によって異なります。多くの異なる種類のコールバック関数にはさまざまなパラメータがあります。これらのパラメータの説明は、一般にヘルプに説明されています (パラメータや戻り値など)。コールバック関数. 実際、簡単に言えば、コールバック関数は、作成した関数が特定の条件を満たした後に DLL によって呼び出されます。コールバック関数は、設定した条件が満たされたときにシステムによって自動的に呼び出される、割り込み処理関数のようなものです。以下はサンプル コードです: WorkClass.cs: usingSystem; namespaceCallBackSample ...{ publicdelegatestringShowMessage(stringmessage); innerclassWorkClass ...{ publicvoidDoWork(stringmessage) ...{ ShowMessageshowMessage=newShowMessage(showCoolMessage); showMessage =showTerribleMessage; stringresult=" "; foreach(ShowMessageshinshowMessage.GetInvocationList()) ...{ result =sh(message); } Console.Write(result); Console.Read(); } privatestringshowCoolMessage(stringmessage) ...{ strings=message "クール! "; 戻り値; } privatestringshowTerribleMessage(stringmessage) ...{ strings=メッセージ "ひどい!"; 戻り値; } } } Program.cs: namespaceCallBackSample ...{ classProgram ...{ staticvoidMain(string[]args) ... { WorkClassworkClass =newWorkClass(); workClass.DoWork("バスケットボール"); } } }

以上がネストされた DLL でコールバック関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:docexcel.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート