Я хочу, чтобы мои DLL-файлы были в подкаталоге каталога, где находится мой исполняемый файл. Мой текущий каталог выглядит следующим образом:Есть ли исполняемые файлы, отделенные от 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
Есть счастливый промежуточный, активированный '/ DELAYLOAD'. В этом случае функция обратного вызова запускается, когда необходима DLL, которая может загрузить ее из правого каталога. –