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
    2

    Ausgabe wenn man das oberste WriteLine wieder auskommentiert:
    0
    127
    127
    Handle 1372
    2

    Meinungen ? 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.


Anmelden zum Antworten