2010-01-31 4 views
7

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

2

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.

+0

Das dauert ewig. Ich möchte Zugriff auf alle Funktionen in einer Klasse haben. –

+0

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

+1

Erstellen einer netten Benutzeroberfläche in C++ ist ein Kopfzerbrechen. (IMHO) –

1

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.

+1

Sie empfehlen Urheberrechtsverletzungen? – dtb

+0

Es handelt sich nicht um eine Urheberrechtsverletzung, wenn es nur einen einzigen richtigen Weg gibt. – Josh

+1

@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

1

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.

Verwandte Themen