0 Pluspunkte 0 Minuspunkte

Ich habe ein Programm in C++ indem ich DLL Dateien zur Laufzeit laden möchte.

std::string pluginFolder = "./";
std::vector<std::string> dllFiles = getDllFiles(pluginFolder);
std::vector<MyLibrary*> loadedLibraries;
for (const std::string& dllPath : dllFiles) {
	MyLibrary* myLib = new MyLibrary(dllPath.c_str());  
	if (!myLib->IsValid()) {
		delete myLib;
		continue;
	}
	MyFunction myFn = (MyFunction)myFn->GetFunction("register");
	if (myFn) {
		myFn(&interpreter);
		loadedLibraries.push_back(myLib);
	} else {
		delete myLib;
	}
}

Das Problem ist aber wenn ich das Programm im PATH stehen habe dann lädt es die DLL Dateien nicht weil er sie im aktuellen Verzeichnis sucht. Wie kann ich machen, dass die DLL Dateien aus dem Verzeichnis geladen werden worin die EXE Datei liegt oder einem anderen Unterordner davon?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Den Ausführungspfad unter Windows kannst du mit der Funktion GetModuleFileNameA() aus der Windows-API erstellen.

char buffer[MAX_PATH];
GetModuleFileNameA(NULL, buffer, MAX_PATH);
std::string execPath = std::string(buffer);
size_t lastSlash = execPath.find_last_of("\\/");
std::string realExecPath = execPath.substr(0, lastSlash);
von (786 Punkte)