Fehler beim Laden einer dll auf anderem PC



  • Hallo zusammen,

    folgendes Problem wenn ich den code auf meinem PC (auf dem habe ich das projekt programmiert) ausführe, werden die .dll dateien geladen.
    Auch wenn ich die release aus dem ordner heraus lade.
    wenn ich jetzt auf einen anderen PC gehe.
    Wird immer if (hinstLib == NULL) ausgelößt.

    Kann mir vllt einer sagen warum? ordnerstruktur ist die gleiche die .dll datein sind auch vorhanden
    Auf dem anderen PC ist kein VS installiert.

    boost::container::string file = "..\\..\\" + str_name;
    
    				int len;
    				int slength = (int)file.length() + 1;
    				len = MultiByteToWideChar(CP_ACP, 0, file.c_str(), slength, 0, 0); 
    				wchar_t* buf = new wchar_t[len];
    				MultiByteToWideChar(CP_ACP, 0, file.c_str(), slength, buf, len);
    				std::wstring newFilename(buf);
    
    				#ifdef UNICODE
    				std::wstring stemp = newFilename; // Temporary buffer is required
    				LPCWSTR result = stemp.c_str();
    				#endif
    
    				// Load Library 
    				hinstLib = LoadLibrary(result);
    
    				if (hinstLib == NULL)
    				{
    					cout << "load " << str_name << "Failed"<< endl;
    					return -1;
    				}...
    


  • Hi

    1. Falsches Forum, WinAPI wäre besser
    2. Checke den GetLastError() nach dem LoadLibrary(..)

    Eine mögliche Fehlerursache kann sein, dass eine Abhängigkeit (andere DLL) nicht gefunden wird.

    Edit
    Und das delete nicht vergessen, oder besser gleich std::vector nehmen.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • OK danke,
    hatte ich derweil auch gemacht
    Fehler code ist 14001 side by side error

    hab jetzt mal mit dem dependency walker in meine zu ladende .dll auf dem anderen System rein geschaut und siehe da er kann eigige benötigte andere .dll dateien nicht finden.

    Daher jetzt die frage kann ich meine .dll so kompilieren das alle externen die er benötigt mit einbindet?

    Oder muß ich die anderen jetzt auch mit kopieren weil das sind unteranderm .dll datein wie msvcp90d.dll



  • hab die dll's jetzt eingebunden doch hab ich immer noch den 14001 side by side kann mir jemand sagen wie ich den weg bekomme???



  • CRT statisch linken



  • Das Laden von DLLs erfordert je nach Compiler besondere Massnahmen. Die DLL muss die darin enthaltenden Funktionen exportieren und die Anwendung diese Funktionen daraus geeignet importieren. Für den Import sind am besten aus der DLL erstellte Import-Libraries mit implib (OS-Command) zu erstellen, diese in die Applikation einzubinden und Prototypen für die DLL-Funktionen zu deklarieren. Ist leider alles abhängig vom Hersteller des Compilers wie man das genau machen muss.


Anmelden zum Antworten