スレッドが開始または終了したときに通知されるオブジェクトA(A :: Notify()メソッド)があります。
このスレッドは、私のDLLファイルを動的にロードします(私はそれを書くことができます)。
私はこのDLLのdllMain関数を書く必要がありますが、私はNotify()メソッドを実行できるようにこの関数からAオブジェクトへの参照を取得する方法がわかりません。
アイデア?スレッドが起動したときにオブジェクトに通知する
答えて
A::Notify()
を静的メソッドにすることはできますか? それ以外の場合は、Singleton
メソッドが目的を果たす可能性があります。
メインプログラムでは、クラスAのインスタンスがあります。メインプログラムが特定のDLLをロードするときに、そのインスタンスに対してA :: Notifyを呼びたいと思っていますか?
私が知っている限り、LoadLibraryに追加の引数を渡す方法はありません。
A :: Notifyが静的である場合、またはAがシングルトンの場合、exeファイルから "NotifyA"メソッドをエクスポートし、LoadLibrary( "yourexe")を呼び出すとGetProcAddressが呼び出され、NotifyAそれを呼び出すことができます。 (はいのexeファイルは、DLLのようなメソッドをエクスポートすることができます!)
二番目のオプションは、独自のLoadLibraryを書くことで、DLLの初期化メソッドは、その後、保存することができます例えば
HMODULE MyLoadLibrary(string dll, A *a)
{
HMODULE module = LoadLibrary(dll.c_str())
void (call*)(A*) = void (*)(A*)GetProcAddress(module, "Init");
call(a);
return module;
}
、DLLのメイン後に第2のメソッドを呼び出すこと後で使うインスタンス。
私はAオブジェクトがDLLにないと思いますか? – neuro
DLLはすべてのプロセスで1回ロードされます。ロードされると、プロセスでスレッドが作成されるたびにそのDllMainが自動的に呼び出されます。 Aは、グローバル変数であると仮定すると、次のことができます。あなたが最初のDLLをロードした後
- は、DLL内にグローバルポインタを設定しますエクスポートされた関数を呼び出したDllMainを使って呼び出されるたび
- スレッドがアタッチされている理由は、DLLにあるポインタを介してAを呼び出します。
また、exeでメッセージループを開始し、スレッドIDをDLLに渡すこともできます。次に、スレッドがDLLに接続するたびに、メッセージループに、作成されたスレッドの詳細を示すメッセージを送信します。これはもう少し複雑な解決策ですが、DLLをAクラスに慣れさせる必要がありません。
- 1. 通知がクリックされたときにアクティビティを起動する方法は?
- 2. GCM通知を受信したときにアプリケーションを起動します。
- 3. ホームスクリーンアプリを再起動したときのウィジェット通知?
- 4. iOS:ローカル通知が時間通りに起動しない
- 5. Android:通知バンドルが起動しない
- 6. 通知が通知されたときに通知を受け取る方法
- 7. プッシュ通知タップのためアプリが起動しました
- 8. システムがクラッシュまたは再起動したときに通知する予定/意図はありますか?
- 9. NSNotificationCenter:オブジェクトは通知されたスレッドと同じスレッドで通知を受け取りますか?
- 10. ユーザーが新しいSMS通知をクリックしたときに自分自身のアクティビティを起動する方法
- 11. 電話が再起動したときに通知が消えてしまいます
- 12. ユーザーがマップを移動したときにMKMapViewDelegateが通知する
- 13. EventKitイベントが発生したときにアプリケーションに通知する
- 14. GTK +起動通知アイコン
- 15. Iphone4のプッシュ通知と起動アプリケーション
- 16. GPSと時間起動のプッシュ通知
- 17. 複数のスレッドが起動したときにSilverlightアプリケーションが応答しない
- 18. アプリが初めて起動されたときのiPhoneの通知
- 19. 電話を再起動した後にバーに通知を保存する
- 20. スレッドが完了すると、メインスレッドに通知
- 21. スレッドに停止通知するオプション
- 22. ClickOnceアプリケーションの起動時にWebアプリケーションに通知する方法
- 23. .NET WPF MissingMethodExceptionが新しいスレッドを起動するとき
- 24. 子スレッドが終了したことを親に通知します。親は別の子を起動できます。[C#]
- 25. ユーザーがオンラインになったときに通知する
- 26. RVO/NRVOが起動したときにオブジェクトがコピーされるかどうか?
- 27. システムがフリーズしたときに通知を受ける
- 28. スウィングが終了したときに通知されます
- 29. 現在のスレッドが終了した後にスレッドを起動する
- 30. 新しいタスクが開始できるときに通知するコールバック付きのJavaタスクキュー、スレッドプール、およびスレッド
さらに正確に言えば、あなたの質問を読んでいるようですが、 "通知する"部分はdllの読み込みとは無関係です。これが本当であれば、あなたのスレッドクラスはA :: notify()を呼び出さなければなりません(A:DIPへの参照を与えて)、DLLをロードしてください。 – neuro