GetModuleHandle v LoadLibrary

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    GetModuleHandle v LoadLibrary

    Hallo.
    Es geht um folgenden Code:

    C#-Quellcode

    1. [DllImport("Kernel32.Dll", SetLastError = true, CharSet = CharSet.Ansi)] static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] String lpFileName);
    2. [DllImport("Kernel32.Dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]static extern IntPtr GetProcAddress(IntPtr hModule, String procName);
    3. [DllImport("Kernel32.Dll", CharSet = CharSet.Auto)] public static extern IntPtr GetModuleHandle(String lpModuleName);
    4. private static void doit()
    5. {
    6. String BaseP = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Mozilla Firefox");
    7. String P = Path.Combine(BaseP, "nss3.dll");
    8. if(!File.Exists(P)) Console.WriteLine("Does not exist!");
    9. LoadLibrary(P);
    10. IntPtr k = GetModuleHandle("nss3");
    11. Console.WriteLine(k.ToString());
    12. }


    In Vb.net funktioniert es (hab die Funktionsvorschriften genauso von pinvoke übernommen).

    Wieso funktioniert der C# Code nicht?

    Bekomme bei GetModuleHandle immer 0 zurück.
    Du solltest überprüfen, ob das Handle, dass du von LoadLibrary zurück bekommst null ist. Falls nämlich das laden fehlschlägt bekommst du auch von GetModuleHandle Null zurück.
    An LoadLibrary ist nichts Falsch, ich meinte nur ne Überprüfung kann trotzdem nicht schaden.
    Müsste es nicht eigentlich auch

    C#-Quellcode

    1. IntPtr k = GetModuleHandle("nss3.dll");

    sein ?

    Daniel Baumert schrieb:

    C#-Quellcode

    1. if(!File.Exists(P)) Console.WriteLine("Does not exist!");
    Mach da dies draus:

    C#-Quellcode

    1. if(!File.Exists(P))
    2. {
    3. Console.WriteLine("Does not exist!");
    4. return;
    5. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!