Errorcodes in C# Aufrufen ?
-
Hi Leute, folgendes Codefragment:
// 1 Process curProcess = System.Diagnostics.Process.GetCurrentProcess(); // 2 ProcessModule curModule = curProcess.MainModule; // 3 IntPtr ModuleHandle = GetModuleHandle(curModule.ModuleName); // 4
vor 1 und nach 4 benutze ich unter anderem diverse Win32-Aufrufe, Debugmeldungen habe ich jetzt auch mal weggelassen.
Sachverhalt: meine Methode funktioniert nicht, mein erster Gedanke war natürlich ein Fehler in den Win32-Aufrufen. Deshalb hab ich zuerst bei 4 mittels GetLastError festgestellt, dass Fehler 126 vorliegt. Das fand ich recht komisch und hab dann zusätzlich noch bei 1 mittels GetLastError getestet. Jetzt die Überraschung:
das erste Fehler war wieder 126, der zweite jetzt plötzlich 127. Ich hab dann spaßeshalber noch bei 2 und 3 geschaut und siehe da, die Gesamtausgabe der Fehler war nun 126,126,127,127.
Das heißt also unterm Strich, dass der Aufruf von ProcessModule curModule = curProcess.MainModule; einen Fehlercode 127 erzeugt, aber nur dann, wenn ich vorher bereits GetLastError aufgerufen habe.
Findet das noch jemand komisch ? Übersehe ich irgendwas ? Wie kann beim Zuweisen einer C# Property der Win32 Fehlercode geändert werden ?
Danke schonmal
UInt
-
Wie sehen denn deine Imports der Win32-Funktionen aus?
-
Eventuell solltest du, wenn du das nicht schon tust, in deinen Imports, im DllImport-Attribut SetLastError auf true setzen und mit Marshal.GetLastWin32Error() den letzten Fehlercode abrufen.
-
ok, das "Problem" hat anscheinend mit DLLImports nichts zu tun.
neues Projekt
static void Main() { //Debug.WriteLine(Marshal.GetLastWin32Error()); Application.Run(new Form1()); } private void button1_Click(object sender, System.EventArgs e) { Debug.WriteLine(Marshal.GetLastWin32Error()); Process curProcess = System.Diagnostics.Process.GetCurrentProcess(); Debug.WriteLine(Marshal.GetLastWin32Error()); Debug.WriteLine("Handle " + curProcess.Handle); System.Diagnostics.ProcessModule curModule = curProcess.MainModule; Debug.WriteLine(Marshal.GetLastWin32Error()); }
Ausgabe:
127
1008
Handle 1388
2Ausgabe wenn man das oberste WriteLine wieder auskommentiert:
0
127
127
Handle 1372
2Meinungen ? Außer dem geänderten Handle kann ich die Ausgabe nicht wirklich erklären...Der ursprüngliche Beitrag war unter Visual Studio 2003 (bitte keine Kommentare hierzu
). Das leere Projekt hier war jetzt unter VS2008 in der Firma, also komplett anderes System.