最近、AVerMediaのビデオキャプチャカードを使用し、二次開発のためのSDKの必要性、処理のためのフレームを取得するためのプロジェクトを行っています。
要求されたとして、コールバック関数は、コールバック関数のその定義は、デモコード、コンパイル、エラーを固執、静的関数であります!!静的な表示機能は、不正な変数を参照することはできません。
言って無力な、技術的なアドバイス、「静的な機能のみ静的変数と呼ばれることはなく、関数の内部で静的メンバ関数を呼び出したいことができますが、それはオブジェクトへのポインタなければなりません。」
CMyDlg * pThis =(CMyDlg *)lUserData;:このように
それは確かに達成するために他の関数を呼び出すためのコールバック関数内で直接機能を実装することはできません、
霧ああ、方法は、デモを参照すると、次に、コールバック関数のポインタ内のクラスを再定義するクラスのメンバ関数を呼び出し、その後、メンバ関数内に実装します。
このような内部コールバック関数コールバック:CMyDlg * pThis =(CMyDlg *)lUserData。
pThis-> ShowPIP; // ShowPIP主な機能は、機能を達成することです
この変更により、コンパイルされ、言い換えれば、コールバック関数は、main関数を達成するためのメンバ関数を呼び出すために!ランは、フラッシュバック、に依存しています!!
、模索の日は、それは、唯一の百度を起こったのか分からない、とこの記事では、自分自身に大きなインスピレーションを与えているリンクを開いてクリックあなたもコンパイルすることはできません、あなたが直接、エラーが発生したコールバック関数としてC ++メンバ関数を使用しようとすると、することにより、
確かにそれは、作者のおかげです。
、まあ、コールバック関数自体は確かに静的な機能である、変更することはできませんが、関数function(つまりハンドラShowPIPは、コールバック関数内で呼び出す)の本当の体は、通常のC関数ではなく、クラスのメンバ関数として定義することができます
さらに、関連する変数は、ソースファイル内のグローバル変数として定義されます。このように:
空ShowPIP(データ型A、Bデータ型); //定义
ボイドShowPIP(データ型A、Bデータ型)
{
...
} //関数本体
//コールバック関数本体
BOOL WINAPIコールバック(*、*、...)
{
ShowPIP(A、B)。
TRUEを返します。
}
コンパイルは、それはそうです!
通常、実行中!
ナイス!
概要:メンバー関数コールバック関数を使用していないが使用して直接呼び出される通常のC関数を。