C++ DLL in C# Programm geht unter XP nicht



  • Hallo

    Ich habe mir in C++ eine DLL erstellt und will diese in C# nutzen.
    Ich benutze dafür Visual Studio Express 2012 auf einen 64bit Rechner die DLL sowie das Programm werden als X86 DLL/Programm kompiliert.

    Auf meine PC mit Visual Studio (Win7 X64) klappt das auch problemlos.
    Ich hatte aber das Problem, dass es auf anderen PCs eine dllnotfoundexception gab.
    Nun habe ich herausgefunden das die Visual c++ redistributable auf die Zielrechnern benötigt wird alternativ konnte ich auch im Compiler einige Einstellungen setzen das das c++ redistributable Packet nicht benötigt wird (Laufzeitbiblothek auf Multithreaded-Debug (/MTd) usw...)

    Nun läuft das Programm unter Windows 7 X86 und 64 auf verschiedenen Rechnern erst einmal ohne Probleme.
    Doch leider bekomme ich bei XP weiterhin die Meldung das es Probleme mit der DLL gibt.

    System.DllNotFoundException: Unable to load DLL 'dllname.dll' : Die angegebene Prozedur wurde nicht gefunden. (Exception from HRESULT: 0x8007007F)
    at Anwendungsname.service.startasotheruser(int32 sessionid, String prog) at Anwendungsname.service.start_pipe_server()

    In der DLL wir die Funktion so definiert

    extern "C" __declspec(dllexport) bool _stdcall startasotheruser(DWORD sessionid, const char path[])
    {
    ...
    }
    

    und in C# so eingebunden

    [DllImport("UserSessionControl.dll")]
            public static extern bool startasotheruser(int sessionid, string prog);
    
    //so geht es auch nicht
            [DllImport("UserSessionControl.dll", EntryPoint = "startasotheruser")]
            public static extern bool startasotheruser(int sessionid, string prog);
    

    Muss ich die DLL eventuell anders einbinden?
    Warum tritt der Fehler nur noch unter Windows XP auf?



  • Hast du beim C++ Projekt auf die XP-compatible Toolchain umgestellt?



  • Hi hustbaer

    Danke für die schnelle Antwort das war die Lösung 🙂
    Ich musste VS2012 erst aktualisieren danach war dann das XP Toolchain verfügbar.

    Ist ja verrückt auf was man mittlerweile alles achten muss 🙂


Anmelden zum Antworten