我想在执行另一个c ++程序时打开一个.exe(让我们称之为A)(让我们称之为B),所以我同时执行A和B。
为此,我在B代码中使用此功能:
HINSTANCE result;
result=ShellExecute(NULL,NULL,"d:\\Users\\bci\\Desktop\\Animation\\bin\\Release\\Animation2.exe",NULL ,NULL,SW_SHOWDEFAULT);
cout << "Result is " <<(int)result <<endl;
结果值为42,A无法打开。 我得到的错误是:
Failed to open file "player.png": Unable to open file
Failed to load player spritesheet!
这对应于A代码的这一部分:
// load texture (spritesheet)
sf::Texture texture;
if (!texture.loadFromFile("player.png"))
{
std::cout << "Failed to load player spritesheet!" << std::endl;
return 1;
}
A和B都是使用code :: blocks作为IDE构建的,使用GCC / G ++编译器和GDB调试器来自TDM-GCC(版本4.9.2,32位,SJLJ)。
我在Windows 7 64位(企业和专业,同样的错误)中这样做。
另外,我不知道是否值得讲述,但我在A中使用SFML库,正如您在
中看到的那样 sf::Texture texture;
我认为这与从您正在调用的程序打开文件的权限有关,但我不知道如何解决这个问题。
实际上A和B完全靠自己工作,但B无法通过这种含义打开A.
我很确定我使用右键单击&gt;属性 - >安全选项使我的图像不受限制,但看起来不够。
有人可以帮我这个吗?
答案 0 :(得分:3)
ShellExecute
有一个lpDirectory
参数,可以将shell的当前工作目录设置为调用期间所需的任何内容。
您已将其设置为NULL
,因此当前工作目录不会更改(可能是B
可执行文件的位置,或者您创建的任何其他内容)。程序A
正在使用相对路径,因此期望player.png
位于当前工作目录中;据推测,分发使得文件实际在A
的可执行文件的位置找到,并假设两者是相同的。在这种情况下,他们不是。
只有您可以知道{{1>}当前工作目录所谓的,但基于上述假设,您应该将A
设置为lpDirectory
}。
答案 1 :(得分:0)
正在正确执行程序A.问题是当你从程序B shell执行它时,它运行程序B的当前工作目录。因此它找不到player.png
。您需要编辑程序A以提供player.png
的完整路径,或者需要将player.png
复制到与程序B相同的文件夹中。