Microsoft hat einen sehr schönen Windows-API-Wrapper im .NET-Framework. Es wird in Microsoft.Win32.UnsafeNativeMethods gespeichert, Microsoft.Win32.SafeNativeMethods und Microsoft.Win32.NativeMethods .Unfortunately sie nicht zugänglich sind, weil sie als privat deklariert sind. Gibt es einen einfachen Zugang zu ihnen?Zugriff auf Microsoft.Win32.UnsafeNativeMethods?
Antwort
Die meisten Methodendefinitionen in diesen Klassen (wenn nicht alle) sind extern
Deklarationen mit DllImport Attributen, die sich auf Funktionen in der Windows-API über P/Invoke beziehen. Es spielt keine Rolle, wo diese Deklarationen liegen. Sie können Ihre eigene Klasse namens UnsafeNativeMethods oder SafeNativeMethods erstellen und Deklarationen einreichen, die sich auf dieselben Windows-API-Funktionen beziehen. Sie finden die Signaturen vieler Windows-API-Funktionen für C# unter pinvoke.net.
Die meisten der in diesen Klassen enthaltenen Funktionen werden vom .NET-Framework selbst bereitgestellt. Sie sollten suchen (oder fragen Sie hier), bevor Sie API-Aufrufe tätigen.
Um Ihre Frage zu beantworten, nein.
Das Beste, was Sie tun können, ist, sie von Reflector oder der Referenzquelle zu kopieren.
Sie empfehlen Urheberrechtsverletzungen? – dtb
Es handelt sich nicht um eine Urheberrechtsverletzung, wenn es nur einen einzigen richtigen Weg gibt. – Josh
@Nick Brooks: "Open Source" ist ein gut definierter Begriff. Und es gilt nicht für die Lizenz, Quellcode für persönliche oder akademische Zwecke zu betrachten (unter denen die Referenzquelle lizenziert ist). – dtb
Für was es wert ist, dachte ich immer, es hätte eine kernel32.interop.dll etc mit den statischen Methoden bereits DllImported sein sollen. Aber ich habe mich entschlossen, bei Bedarf meine eigene zu schaffen. Im Laufe der Jahre habe ich festgestellt, dass ich selten mehr als eine Handvoll davon verwende, aber es ist so ein Schmerz in den Arsch, wenn ich eine API brauche, die ich noch nicht importiert habe.
Der Grund könnte die Sicherheitsauswirkung von SuppressUnmanagedCodeSecurityAttribute sein. Überprüfen Sie Move P/Invokes to NativeMethods class
- 1. C# Konsolenanwendung Microsoft.Win32.TaskScheduler.dll FileNotFoundException auf Deployment
- 2. C#: Wie Microsoft.Win32.SafeHandles
- 3. Zugriff auf den Pfad "/ etc/mono/registry" ist verweigert
- 4. Wie übermittle ich Anmeldeinformationen an einen Computer, damit ich Microsoft.Win32.RegistryKey.OpenRemoteBaseKey() darauf verwenden kann?
- 5. CryptographicException: Zugriff verweigert - Zugriff auf Benutzerspeicher freigeben?
- 6. php Zugriff auf mongodb Master/Slave Zugriff
- 7. Zugriff auf Facebook-Daten - Offline-Zugriff
- 8. Zugriff "Zugriff verweigert" beim Zugriff auf iFrame-Dokumentobjekt
- 9. Zugriff auf wsdl auf Tomcat
- 10. Zugriff auf Kamerablitz auf UIImagePickerController?
- 11. SharePoint-Suche: Zugriff auf Standardzugriff auf Inhalte verweigert Zugriff verweigert
- 12. Zugriff auf die Registrierungsseite Zugriff nur auf den Admin
- 13. Zugriff auf Ersteller Objekt
- 14. Zugriff auf Benutzerumgebungsvariable
- 15. Zugriff auf Flixster-Daten
- 16. Zugriff auf DataLayer-Variablen
- 17. Zugriff auf TemplateContent.RootType
- 18. Zugriff auf spärliche Matrixelemente
- 19. Zugriff auf Axapta-Berichtsfelder
- 20. Zugriff auf Datarepeater Schaltfläche
- 21. Zugriff auf Werte global
- 22. Zugriff auf globale Anwendungseinstellungen
- 23. Zugriff auf Listenbilder
- 24. Zugriff auf WPF-Benutzersteuerungswert
- 25. Zugriff auf MultipleChoiceField-Auswahlwerte
- 26. ASPX Zugriff auf Masterseitenfunktion
- 27. Zugriff auf Windows-Registry
- 28. Zugriff auf box2d Körper
- 29. Multithread-Zugriff auf Datei
- 30. Zugriff auf Containersicht-Controller
Das dauert ewig. Ich möchte Zugriff auf alle Funktionen in einer Klasse haben. –
Wie @SLaks schrieb, sind viele API-Funktionen bereits als verwaltete Klassen in .NET Framework verfügbar, z. B. Registrierungszugriff, Windows, GDI. Es dauert normalerweise nicht so lange, ein paar Methodensignaturen von einer Website in eine C# -Datei zu kopieren. Wenn Sie stark von der Windows-API abhängig sind und .NET Framework nicht verwenden, sollten Sie eine geeignetere Programmiersprache verwenden. – dtb
Erstellen einer netten Benutzeroberfläche in C++ ist ein Kopfzerbrechen. (IMHO) –