gpt4 book ai didi

c++ - 将可执行文件与 DLL 分开(这是显式链接吗?)

转载 作者:行者123 更新时间:2023-11-28 06:08:46 25 4
gpt4 key购买 nike

我想将我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com