【问题标题】:Why is SDL not loading my images when main application is accessed via shortcut?当通过快捷方式访问主应用程序时,为什么 SDL 不加载我的图像?
【发布时间】:2013-04-15 06:32:01
【问题描述】:

我最近使用 C++ 和 SDL 库创建了一个程序。最初,所有图像和 DLL 都与主应用程序位于同一文件夹中。我想让主应用程序更容易找到,所以我将所有图像移到了它们自己的文件夹中,并修改了我的源代码以在正确的文件夹中找到它们。到目前为止,一切都很好。主应用程序仍保留在与 DLL 相同的文件夹中。

我创建了一个主应用程序的快捷方式,并将它放在自己的文件夹中。我将目标更改为 %windir%\system32\cmd.exe /q/c start "" ""%SystemRoot%\explorer.exe %UserProfile%\Desktop\Cupcake Corner Build 2.0 (exe test)\dependecies\ Cupcake Corner.exe" 尝试创建一个通用快捷方式,以便该快捷方式适用于我将文件发送给的任何用户。

说到底,我遇到了一个问题。如果我打开主应用程序本身,它将加载图像并完美运行。如果我尝试通过其快捷方式访问主应用程序,则窗口将正确打开并显示正确的标题,尽管不会加载任何图像。我尝试移动一些文件,看看如果我将资源文件夹放在其他地方,快捷方式是否会看到它们,但到目前为止还没有运气。

图片在这里 -> C:\Users\Admin\Desktop\Cupcake Corner Build 2.0\dependecies\resources
此处的主应用程序/dll -> C:\Users\Admin\Desktop\Cupcake Corner Build 2.0\dependecies\
此处的快捷方式 -> C:\Users\Admin\Desktop\Cupcake Corner Build 2.0\

我使用的是 Microsoft Visual Studio Express 2010。我认为这与我在项目选项中设置项目目录的方式有关,但老实说,在这一点上我感到困惑。谁能指出我正确的方向?

【问题讨论】:

  • 我认为问题在于你的应用在当前目录下寻找它的文件,而当前目录可以是任意目录。相反,它应该使用完全限定的路径来查找它们,该路径可以是硬编码的,也可以从注册表中获取(当然,您首先需要将其写入那里)。

标签: c++ image sdl shortcut


【解决方案1】:

通常,在处理应用程序中的文件时(至少应用程序内部知道),您会希望有绝对路径。

解决此问题的最佳方法是使用(一组)添加绝对路径的函数(由GetModuleFilename(0, ...) 或从注册表中的某些配置中找到)

std::string myfiles_root_path = FindMyFilesRootPath();

std::string MakeFullPath(const std::string &filename) { 返回 myfiles_root_path + 文件名; }

函数FindMyFilesRootPath() 使用上述方法之一来查找合适的路径,filename 是应用程序本地文件的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 2016-10-17
    • 2021-12-15
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多