クライアントアプリケーションに通知する必要があるC++ DLLを作成しています。 C++(MFC)では、DLL内にクライアントウィンドウハンドルを登録し、クライアントに何かについて通知する必要があるときにPostMessageを呼び出すことができます。クライアントがC#アプリケーションの場合は何ができますか?C++ DLLから.NETアプリケーションへの通知の送信
答えて
あなたは、この特定のメッセージ
protected override void WndProc(ref Message m)
{
if (m.Msg = YOUR_MESSAGE)
{
// handle the notification
}
else
{
base.WndProc(ref m);
}
}
PostMessageは、別のアプリケーションのメインアプリケーションループにメッセージを発行するようにWindowsに指示するだけです。クライアントがC#アプリケーションであれば、ほぼ確実に同じことをするでしょう。つまり、C#のメインアプリケーションループに送信されたメッセージをどのように読むのですか?
を処理するためのC#ウィンドウにWndProcメソッドをオーバーライドすることができますが、貧乏人のパブリッシュ・サブスクライブ・パターンを実装したい場合は、コールバックが移動するための方法です。 this threadには良い情報があります。
Windowsハンドルにメッセージを投稿することで可能です。あなたのドットネットクラスでは、メッセージを傍受してからメッセージを発信できるダミーのウィンドウを作成します。
ここにいくつかのコードがありますが、WM_MYMESSAGEを使用した場所を記入して、適切なウィンドウメッセージを参照してください.C++ dllでメッセージを投稿することができます。注意してください、私はあなたが望むことを行うためのより良い/他の方法があると確信していますが、これはおそらくはうまくいくでしょう。メッセージを傍受する
//Dummy window classes. Because we don't have access to the wndproc method of a form, we create
//dummy forms and expose the method to the SystemHotKeyHook class as an event.
/// <summary>
/// Inherits from System.Windows.Form.NativeWindow. Provides an Event for Message handling
/// </summary>
private class NativeWindowWithEvent : System.Windows.Forms.NativeWindow
{
public event MessageEventHandler ProcessMessage;
protected override void WndProc(ref Message m)
{
//Intercept the message you are looking for...
if (m.Msg == (int)WM_MYMESSAGE)
{
//Fire event which is consumed by your class
if (ProcessMessage != null)
{
bool Handled = false;
ProcessMessage(this, ref m, ref Handled);
if (!Handled)
{
base.WndProc(ref m);
}
}
else
{
base.WndProc(ref m);
}
}
else
{
base.WndProc(ref m);
}
}
}
/// <summary>
/// Inherits from NativeWindowWithEvent and automatic creates/destroys of a dummy window
/// </summary>
private class DummyWindowWithEvent : NativeWindowWithEvent, IDisposable
{
public DummyWindowWithEvent()
{
CreateParams parms = new CreateParams();
this.CreateHandle(parms);
}
public void Dispose()
{
if (this.Handle != (IntPtr)0)
{
this.DestroyHandle();
}
}
}
クラス:
// <summary>
/// System hotkey interceptor
/// </summary>
public class MessageIntercept: IDisposable
{
private delegate void MessageEventHandler(object Sender, ref System.Windows.Forms.Message msg, ref bool Handled);
//Window for WM_MYMESSAGE Interceptor
private DummyWindowWithEvent frmDummyReceiver_m;
/// <summary>
/// Default constructor
/// </summary>
public MessageIntercept()
{
this.frmDummyReceiver_m = new DummyWindowWithEvent();
this.frmDummyReceiver_m.ProcessMessage += new MessageEventHandler(this.InterceptMessage);
}
private void InterceptMessage(object Sender, ref System.Windows.Forms.Message msg, ref bool Handled)
{
//Do something based on criteria of the message
if ((msg.Msg == (int)WM_MYMESSAGE) &&
(msg.WParam == (IntPtr)xyz))
{
Handled = true;
System.Diagnostics.Debug.WriteLine("Message intercepted.");
}
}
}
が一緒にどのように密接に2つのワークに応じて、私はおそらく、コールバック/イベント・アプローチを使用すると思います。あなたが作ることができる私に
全体「のPostMessage」アプローチ、ハックのビットのように思えるが(それはあなたが投稿している標準メッセージだならば、それは明らかにいいのよ、あなたは何をしたいかによって異なります)
ネイティブクラス用のマネージC++ラッパーを使用すると、マネージラッパーはコールバックを処理し、C#クラスがリッスンできるマネージ(C#互換)イベントを発行できます。
一般的に私はネイティブC++をC#とC#層で結びつけることを熱心にしています。つまり、C#アプリケーションはネイティブC++コードのすべての「醜い」低レベルの詳細を知る必要はありません。
- 1. Windows Phone 7から.NET Winformアプリケーションへプッシュ通知を送信する方法
- 2. バックエンドシステムからAzureプッシュ通知ハブへのプッシュ通知の送信
- 3. dllからメインアプリへのイベント通知
- 4. asp.net webapiからionicアプリケーションへの信号通知の送信方法
- 5. C#dllからwpf exeへのマウス/キーフックデータの通知方法
- 6. UWPアプリケーションの配列をC#からC++/Cxのdllに送信
- 7. Firebase通知 - ユーザーセグメントへの送信とトピックへの送信の差
- 8. リモートサーバーから.NETアプリケーションへの信号の送信
- 9. Azure通知ハブを使用したXamarinアプリケーションからのプッシュ通知の送信
- 10. iOSデバイスへのプッシュ通知の送信
- 11. アンドロイドアプリケーションへの通知の送信
- 12. UrbanAirshipテストデバイスへのプッシュ通知の送信
- 13. 通知へのデータの送信
- 14. リフト:未来からのクライアントへの通知の送信
- 15. nodejsサーバからangularjsへの通知の送信
- 16. Android搭載ハーブ通知 - サブセットへの通知の送信
- 17. アンドロイドデバイスからのFirebase通知の送信
- 18. Facebook Java API、アプリからユーザーへの通知を送信する
- 19. iPhoneからApple Watchへの通知を送信するには?
- 20. GCMプッシュ通知をC#.net(アンドロイドアプリケーション用)を使用して送信
- 21. .NETアプリケーションからWeb APIへの投稿要求を送信
- 22. ZeroMQ C++からC#への通信
- 23. mysqlからアンドロイドモバイルへ自動プッシュ通知を送信
- 24. サーバからアプリケーションをインストールしたユーザセグメントに通知を送信
- 25. WPFアプリケーションからASP.NETコアアプリケーションへの通信
- 26. nodejsサーバーからプッシュ通知を送信
- 27. Andoridアプリケーショングループへの通知の送信と返信の許可
- 28. C#アプリケーションからFirefox拡張機能への通信
- 29. C#からFireBaseカスタムプッシュ通知を送信するには?
- 30. ウィンドウレスコマンドラインプロセスへのコマンドの送信(C#アプリケーションから開始)
右。答えは...? – Curtis
PostMessageを使用するよりも良い方法はありますか? – Curtis
コールバックが使えますか? – cdonner