Ich möchte einige SAPI-Nachrichten von einer DLL, die eine Art Plugin ist, behandeln. Wie behandelt man Nachrichten/Ereignisse in einer VC++ - DLL? Die SAPI-Ereignisbehandlung wird im Beispiel angezeigt unter: http://msdn.microsoft.com/en-us/library/ms720165%28VS.85%29.aspxWie Verwenden von WndProc von einer C++ - DLL?
Antwort
Um "normale" Nachrichten zu verarbeiten, benötigen Sie immer noch ein Window-Objekt. Dies kann ein spezielles Nur-Nachrichten-Fenster sein, das nur die Nachrichtenwarteschlangeninfrastruktur mit normalen Fenstern teilt. Um es zu erstellen, registrieren Sie zuerst Ihre Nachrichtenbehandlungsklasse mit RegisterClass()
. Erstellen Sie als Nächstes eine Nachrichtenwarteschlange, indem Sie HWND_MESSAGE
als übergeordnetes Fenster an CreateWindow()
übergeben. Sie erhalten dann eine HWND zurück, die Sie dann zu SAPI bringen können.
SAPI unterstützt jedoch auch andere Schnittstellen. Die ISpNotifySource-Dokumentationsnamen 4: Windows-Nachrichten, Callbacks, Ereignisse und COM (ISpNotifySink). Um Callbacks zu verwenden, übergeben Sie einfach die Adresse einer Ihrer DLL-Methoden an SetNotifyCallbackFunction
.
WndProc wird verwendet, um alle Nachrichten/Ereignisse zu empfangen, die an ein Fenster gerichtet sind.
Ihre DLL sollte ein Fenster erstellen und auf Nachrichten im Fenster warten. Wenn möglich, sollten Sie dies in Ihrem Hauptprozess implementieren, oder Sie können die DLL einen separaten Thread erstellen lassen, der das Fenster erstellt und auf die Nachricht wartet, während die eigentliche Funktion die Kontrolle an den Prozess zurückgibt.
Wenn Ihr Code als Plugin ausgeführt wird, möchten Sie vielleicht sehen, dass SAPI Sie direkt zurückrufen wird, indem Sie ISpNotifySource::SetNotifyCallbackFunction anstelle von ISpNotifySource::SetNotifyWindowMessage verwenden. SAPI wird dann Ihre Funktion direkt aufrufen, wenn ein Ereignis eintritt.
Bereits von MSalters erzählt –
- 1. Wie shell32.dll von C++ Konsolenanwendung verwenden
- 2. Können Sie eine C# DLL von einer C DLL aufrufen?
- 3. Verwenden von tlbexp.exe auf einer COM-DLL
- 4. Verwenden von Delphi DLL in C#
- 5. Verwenden einer DLL in Visual Studio C++
- 6. C# -Rückruf von DLL
- 7. Verwenden von GetPrivateProfileString von kernel32.dll
- 8. Verwenden von NHibernate in einer DLL
- 9. Verwenden von CURL in einer DLL
- 10. Verwenden von WinAPI und OpenGL-Funktionen (C++) in Qt-Anwendung (wndproc)
- 11. Seltsames Problem Aufruf einer .DLL von C#
- 12. Verwenden von Windows DLL von Linux
- 13. Verwenden von ViewModel von DLL für UserControl
- 14. C# Absturz beim Laden von C++ DLL
- 15. Problem beim Aufruf einer C++ - DLL-Funktion von C#
- 16. Wie bekomme ich den Code von einer `. DLL 'in C++
- 17. Verwenden von C# DLL in Windows Phone 7
- 18. Passing Nachrichten von Unterklasse Original WndProc
- 19. Aktualisieren einer C# Desktop-Anwendung GUI von einer DLL
- 20. SendMessage vs. WndProc
- 21. Verwenden Sie verschiedene Versionen von DLL-Datei in einer App
- 22. Verwenden einer DLL in einer Winform-Anwendung in C#
- 23. Drucken von Konsolenmeldungen von C++ DLL
- 24. Debug CUDA Dll von C#
- 25. Zwingende Farbe von Combobox mit WndProc
- 26. Erstellen von ActiveX-DLL in Visual C++
- 27. Wie Fensterhandle an Wndproc übergeben?
- 28. Handhabung Array zurückgegeben von C++ dll C#
- 29. Wie kann ich eine DLL-Datei von Python verwenden?
- 30. Importieren einer c-DLL-Funktion in C#
Erstellen eines Fensters ist nicht möglich in einem Plugin, funktioniert ein unsichtbares Fenster und dann wie das WndProc in der DLL zu verwenden, jedes Beispiel –
Ein unsichtbares Fenster Ereignisse zu empfangen ist unmöglich, soweit ich weiß. – Sahas
Definitiv möglich. – MSalters