作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将我的 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
最佳答案
您可以注册一个 App Path (see link) ,确保将应用程序备用 DLL 文件夹位置添加到应用程序路径 PATH 值。
关于c++ - 将可执行文件与 DLL 分开(这是显式链接吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31752881/
我是一名优秀的程序员,十分优秀!