Jedesmal wenn ich Code sehe, der in kernel32.dll oder User32.dll aufruft, benötigt das Snippet immer, selbst auf MSDN, den Entwickler, um alle erforderlichen Konstanten (WM_SETREDRAW = 11 zum Beispiel) in die Routine zu schreiben. Da sich diese Konstanten niemals per Definition ändern und immer eine Standarddefinition haben, warum stellt .net sie nicht irgendwo zur Verfügung? Ich habe das Gefühl, dass wir alle unsere eigenen Bibliotheken von Konstanten und Standard-Windows-DLL-Aufrufe erstellen, so wie wir sie brauchen. Es scheint, dass diese Doppelarbeit verschwenderisch und fehleranfällig ist.
Vielleicht habe ich nicht hart genug gesucht und sie sind alle irgendwo da, wenn ja könnte jemand bitte ihren Standort angeben?
Nur das .NET-Team kann die tatsächliche Antwort liefern, denke ich, wir können nur Vermutungen anstellen.
Es gibt wahrscheinlich viele Gründe. Hier sind einige Vermutungen:
IntPtr
-Objekte dargestellt), was nicht die .Net-Methode ist (z. B. sollten Sie FileStream anstelle von CreateFile
/ ReadFile
/% verwenden). co_de% / WriteFile
) CloseHandle
( Environment.NewLine
) . Daher macht das Hinzufügen der gesamten Win32-API keinen Sinn. Microsoft hat einige Windows-spezifische Klassen im A string containing "\r\n" for non-Unix platforms, or a string containing "\n" for Unix platforms.
-Namespace hinzugefügt, aber es ist sehr begrenzt und diese Funktionen sind wichtig (Registrierung Operationen, filedialogs ...).
Bei pinvoke.net würde ich mich nicht zu sehr darauf verlassen. Ich sehe oft schlecht geschriebene Methodendeklarationen, die auf x64-Systemen abstürzen würden ( Microsoft.Win32
anstelle von int
, struct layout issues ...). Ein anderes Beispiel: Die IntPtr
Methodendeklarationen sind inkonsistent. WriteFile
vs SafeHandle
... usw.
Es gibt nicht nur einen einzigen Grund, es gibt viele. Ich kann mir vorstellen, dass einer der folgenden Faktoren eine Rolle bei der Entscheidung spielt, sie nicht einzubeziehen:
Sie können das Pinvoke Interop-Assistent verwenden. Die bereitgestellten Deklarationen werden automatisch aus den Windows SDK-Headern generiert.
.NET wurde entwickelt, um ein komplettes Ökosystem zu sein. Das Einwerfen in die Windows-API ist ein Hack, und das Nichteinbeziehen der Konstanten ist Microsofts Weg, es zu entmutigen.