2010-01-31 7 views
7

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

2

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.

+0

To trwa wieki. Chcę mieć dostęp do wszystkich funkcji w jednej klasie. –

+0

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

+1

Tworzenie ładnego interfejsu w C++ to ból głowy. (IMHO) –

1

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.

+1

Sugerujesz naruszenie praw autorskich? – dtb

+0

Nie jest to naruszenie praw autorskich, gdy jest tylko jeden prawidłowy sposób to zrobić. – Josh

+1

@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

1

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.