Я хочу, чтобы мои DLL находились в подкаталоге каталога, в котором находится мой исполняемый файл. Мой текущий каталог выглядит так:
Main Folder: [Folder]
Program.exe
sfml.dll
Assets [Folder]
Picture.png
Music.wav
Когда я действительно хочу, чтобы это выглядело так:
Main Folder: [Folder]
Program.exe
Assets [Folder]
Picture.png
Music.wav
MyDlls[Folder]
sfml.dll
Когда я пытаюсь поместить их (DLL) в папку, я получаю сообщение об ошибке:
Программа не может запуститься, потому что sfml-system-d-2.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы решить эту проблему.
Итак, я посмотрел на явные ссылки и следовал инструкциям здесь:
http://www.dreamincode.net/forums/topic/118076-dlls-explicit-linking/
Если явные ссылки не то, что мне нужно использовать, то, пожалуйста, скажите мне, что мне нужно сделать. Иначе, пожалуйста, скажите мне, что не так с моим кодом ниже: (Кроме того, я не знаю, является ли это статическим или динамическим соединением .. ??)
// Startup.h
#ifndef STARTUP_H
#define STARTUP_H
#include <iostream>
#include <windows.h>
class Startup
{
private:
HINSTANCE hDLL;
public:
// Explicitly link SFML DLL's
typedef int(*funcAdd) (int, int);
typedef int(*funcSubtract) (int, int);
void LoadDLLs()
{
// Retrieve DLL handle.
vector<LPCSTR> libraries = {"openal32.dll",
"sfml-audio-2.dll",
"sfml-audio-d-2.dll",
"sfml-graphics-2.dll",
"sfml-graphics-d-2.dll",
"sfml-system-2.dll",
"sfml-system-d-2.dll",
"sfml-window-2.dll",
"sfml-window-d-2.dll"};
for (int i = 0; i < libraries.size(); i++)
{
hDLL = LoadLibrary(libraries[i]);
if (hDLL == NULL)
{
std::cout << "Failed to load library.\n";
}
else
{
funcAdd Add = (funcAdd)GetProcAddress(hDLL, "Add");
funcSubtract Subtract = (funcSubtract)GetProcAddress(hDLL, "Subtract");
if (Add)
std::cout << "10+10=" << Add(10, 10) << std::endl;
if (Subtract)
std::cout << "50-10=" << Subtract(50, 10) << std::endl;
FreeLibrary(hDLL);
}
std::cin.get();
}
};
#endif
Вы можете зарегистрировать Путь к приложению (см. Ссылку), убедившись, что вы добавили альтернативную папку DLL вашего приложения в значение PATH для пути к приложению.
Вы не можете делать то, что вы хотите напрямую. Прикрепленный код будет работать только для динамической загрузки DLL, но это не так.
То, что вы хотите сделать, будет зависеть от платформы, и вам нужно установить путь к библиотеке перед выполнением программы.