Firma Microsoft ma bardzo ładne opakowanie interfejsu API systemu Windows zawarte w platformie .NET. Jest on przechowywany w Microsoft.Win32.UnsafeNativeMethods, Microsoft.Win32.SafeNativeMethods i Microsoft.Win32.NativeMethods .Unfortunately nie są dostępne, ponieważ są one zadeklarowane jako prywatne. Czy istnieje sposób na łatwy dostęp do nich?Dostęp do Microsoft.Win32.UnsafeNativeMethods?
Odpowiedz
Większość definicji metod w tych klasach (jeśli nie wszystkie) to deklaracje extern
z atrybutami DllImport, które odnoszą się do funkcji w interfejsie API systemu Windows poprzez P/Invoke. Nie ma znaczenia, gdzie znajdują się te deklaracje. Można utworzyć własną klasę o nazwie UnsafeNativeMethods lub SafeNativeMethods i umieścić tam deklaracje odnoszące się do tych samych funkcji interfejsu API systemu Windows. Znajdziesz podpisy wielu funkcji Windows API dla C# na pinvoke.net.
Większość funkcji zawartych w tych klasach jest ujawniona przez samą strukturę .Net; powinieneś przeszukać (lub zapytać tutaj) przed wywołaniem wywołań API.
Aby odpowiedzieć na pytanie, nie.
Najlepsze, co można zrobić, to skopiować je z reflektora lub źródła odniesienia.
Sugerujesz naruszenie praw autorskich? – dtb
Nie jest to naruszenie praw autorskich, gdy jest tylko jeden prawidłowy sposób to zrobić. – Josh
@Nick Brooks: "Open Source" to dobrze zdefiniowany termin. Nie dotyczy to również licencji na przeglądanie kodu źródłowego w celach osobistych lub akademickich (w ramach których źródło referencyjne jest licencjonowane). – dtb
Za to, co jest warte, zawsze myślałem, że powinienem mieć plik kernel32.interop.dll itp. Z użyciem statycznych metod DllImport. Ale uciekam się do tworzenia własnych na podstawie potrzeb. Przez lata odkryłem, że rzadko używam ich więcej niż garstki, ale to jest taki ból w dupie, kiedy potrzebuję API, którego jeszcze nie zaimportowałem.
Przyczyną może być wpływ SuppressUnmanagedCodeSecurityAttribute na bezpieczeństwo. Sprawdź Move P/Invokes to NativeMethods class
- 1. Kiedy metoda Microsoft.Win32.OpenFileDialog.ShowDialog() zwraca wartość null?
- 2. Dostęp do ścieżki "/ etc/mono/registry" jest zabroniony
- 3. knockout.js zagnieżdżony dostęp do foreach dostęp do własności pętli zewnętrznej
- 4. Dynamiczny dostęp do komórki
- 5. Uzyskaj dostęp do danych
- 6. dostęp do obsługi zdarzeń
- 7. Dostęp do folderu WP8
- 8. Ogólny dostęp do DbContext
- 9. Dostęp do zmiennych statycznych
- 10. Dostęp tylko do AJAX
- 11. Dostęp do pól prywatnych
- 12. Coffeescript dostęp do current_user
- 13. Dostęp do metadanych PNG
- 14. Delphi + Dostęp do tablicy zespołu
- 15. Dostęp do rejestru systemu Windows
- 16. EWS: Dostęp do udostępnionych kalendarzy
- 17. Wiosenny dostęp do zabezpieczenia głównego
- 18. Ograniczać dostęp do zestawu .NET?
- 19. Dostęp do mikrofonu w Pythonie
- 20. Dostęp do zmiennych konfiguracyjnych Devise
- 21. Dostęp do elementów w coo_matrix
- 22. Dostęp do kontrolera FXML klasa
- 23. Dostęp do udostępnionego folderu sieciowego
- 24. dostęp do pg_largeobject na heroku
- 25. Jak uzyskać dostęp do aplikacji?
- 26. Dostęp do iPhone'a z Windows
- 27. Dostęp do odczytu repozytorium Subversion
- 28. Dostęp do biblioteki muzycznej iPhone'a
- 29. Bezpośredni dostęp FTP do Heroku?
- 30. Dostęp do portu szeregowego HTML5?
To trwa wieki. Chcę mieć dostęp do wszystkich funkcji w jednej klasie. –
Jak napisał @SLaks, wiele funkcji API jest już ujawnionych jako klasy zarządzane w .NET Framework, np. Dostęp do rejestru, okna, GDI. Zwykle kopiowanie kilku sygnatur metod z witryny internetowej do pliku C# nie trwa tak długo. Jeśli w dużej mierze polegasz na interfejsie API systemu Windows i nie korzystasz z .NET Framework, dlaczego nie użyć bardziej odpowiedniego języka programowania? – dtb
Tworzenie ładnego interfejsu w C++ to ból głowy. (IMHO) –