为什么SDL在通过快捷方式访问主应用程序时没有加载我的图像?

时间:2013-04-15 06:32:02

标签: c++ image sdl shortcut

我最近使用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
主app / dlls在这里 - > C:\ Users \ Admin \ Desktop \ Cupcake Corner Build 2.0 \ dependecies \
这里的快捷方式 - > C:\ Users \ Admin \ Desktop \ Cupcake Corner Build 2.0 \

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

1 个答案:

答案 0 :(得分:0)

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

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

std :: string myfiles_root_path = FindMyFilesRootPath();

std :: string MakeFullPath(const std :: string& filename)   {       return myfiles_root_path + filename;   }

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