スレッドが開始または終了したときに通知されるオブジェクト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. Java ExecutorService: - イベントが発生したときに起動するスレッドに通知する
- 2. 通知がクリックされたときにアクティビティを起動する方法は?
- 3. GCM通知を受信したときにアプリケーションを起動します。
- 4. Androidの起動時に通知が自動的に起動します
- 5. ホームスクリーンアプリを再起動したときのウィジェット通知?
- 6. iOS:ローカル通知が時間通りに起動しない
- 7. アプリケーションが終了したときに通知からアクティビティを起動中にアプリケーションが終了する
- 8. Android:通知バンドルが起動しない
- 9. どのスレッドが起床を通知しますか?
- 10. NSNotificationCenter:オブジェクトは通知されたスレッドと同じスレッドで通知を受け取りますか?
- 11. 新しいスレッドを起動したときにValgrindがエラーになる理由
- 12. システムがクラッシュまたは再起動したときに通知する予定/意図はありますか?
- 13. 通知が通知されたときに通知を受け取る方法
- 14. プッシュ通知タップのためアプリが起動しました
- 15. Javaスレッドがnotify()スレッドに通知できませんか?
- 16. Client-Routingが起動する.NET WebApiに通知する
- 17. 通知でアプリケーションを起動するときにプッシュ通知ペイロードを使用する
- 18. ユーザーが新しいSMS通知をクリックしたときに自分自身のアクティビティを起動する方法
- 19. 電話が再起動したときに通知が消えてしまいます
- 20. ローカル通知がすぐに起動する
- 21. ユーザーがマップを移動したときにMKMapViewDelegateが通知する
- 22. PhoneGap - OneSignalプッシュ通知 - ユーザーが通知をタップするたびにアプリケーションを再起動するアプリ
- 23. EventKitイベントが発生したときにアプリケーションに通知する
- 24. データフロージョブが完了したときにGoogle PubSubに通知する
- 25. アプリが終了したときにビデオチャットアプリケーションに通知する
- 26. Slack + Heroku:Herokuアプリがダウンしたときにスラックに通知する
- 27. GTK +起動通知アイコン
- 28. 複数のスレッドが起動したときにSilverlightアプリケーションが応答しない
- 29. Iphone4のプッシュ通知と起動アプリケーション
- 30. GPSと時間起動のプッシュ通知
さらに正確に言えば、あなたの質問を読んでいるようですが、 "通知する"部分はdllの読み込みとは無関係です。これが本当であれば、あなたのスレッドクラスはA :: notify()を呼び出さなければなりません(A:DIPへの参照を与えて)、DLLをロードしてください。 – neuro