无法 运行 在没有 visual studio 的情况下在 PC 上发布构建
Cannot run release build on a PC without visual studio
标题几乎说明了一切。
我现在正在学习C++,决定尝试做一个游戏。我也想学C++,但是没有安装VS的朋友试了一下运行,开机就死机了
当我从 VS 外部 运行 时它很好,我将它以包含所有 DLL 的 ZIP 文件和发布版本发送给他。不确定为什么会这样,有人有什么想法吗?
这是代码,写得比较烂,可读性差(抱歉。)
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>
int main()
{
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE);
bool gameover(1);
sf::RenderWindow window(sf::VideoMode(240, 500), "Hangman but not very good.");
sf::Text text;
sf::Font font;
sf::Sprite sprite;
sf::Texture texture;
texture.loadFromFile("0.png");
sprite.setTexture(texture);
char uInput[11] = {0};
char displayed[11] = {0};
bool setup = false;
int charCount(0);
int iii(0);
bool correct(0);
long long wrongGuesses(0);
int wordlength(0);
long long gameoverCounter(0);
char currentGuess = 0;
bool bypass = true;
char pngC = '1';
char IOarray[] = "x.png";
bool firstSetup = true;
int correctCounter = 0;
font.loadFromFile("Xefus.ttf");
text.setColor(sf::Color::Yellow);
text.setCharacterSize(24);
text.setFont(font);
text.setString("Please enter the word to guess, press enter to stop");
while(window.isOpen())
{
sf::Event event;
while(gameover)
{
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
if(event.type == sf::Event::TextEntered)
{
bypass = true;
if(iii < 10 && !setup)
if(event.text.unicode < 128 && event.text.unicode > 96)
{
uInput[iii] = static_cast<char>(event.text.unicode);
++iii;
++wordlength;
}
{
for(int i = 0; i < wordlength; ++i)
if(event.text.unicode == uInput[i] && !firstSetup)
{
displayed[i] = uInput[i];
bypass = false;
++correctCounter;
}
else if(bypass = true)
++wrongGuesses;
}
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
setup = true;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace))
{
uInput[iii] = 0;
iii -= 1;
}
}
if(!setup)
{
text.setString(uInput);
displayed[wordlength - 1] = ('*');
setup = false;
}
else
{
text.setString(displayed);
bypass = false;
if(firstSetup)
{
firstSetup = false;
gameoverCounter = 0;
wrongGuesses = 0;
correctCounter = 0;
}
if(wrongGuesses >= wordlength)
{
++gameoverCounter;
wrongGuesses = 0;
IOarray[0] = static_cast<char>(gameoverCounter + 48);
texture.loadFromFile(IOarray);
}
if(gameoverCounter >= 9)
{
return 0;
window.clear();
window.draw(sprite);
window.draw(text);
window.display();
}
if(correctCounter >= wordlength)
{
return 0;
window.clear();
window.draw(sprite);
window.draw(text);
window.display();
}
wrongGuesses = 0;
}
window.clear();
window.draw(sprite);
window.draw(text);
window.display();
}
}
}
出现此类问题的原因之一是缺少 dll。因此,请确保系统上有所有依赖的 dll。
我们在复制依赖库时常犯的一个错误是我们忘记复制 运行 任何 C++ 应用程序都需要的 c++ 运行 time dll。此库与 visual studio 一起安装,这就是应用程序 运行 在您的系统上而不在您朋友的系统上的原因。
C++ 运行 时间库是:msvcr、msvcrt、msvcp
您还可以使用 Dependency Walker 软件检查任何其他缺失的依赖项。
希望对您有所帮助
Vikash 是对的,这是缺少 运行time 库的情况。您需要做的是在您的目标计算机上安装正确的 Redistributable 软件包。
Google 并下载适合您的应用程序的版本:
"Visual C++ Redistributable for Visual Studio YYYY" 其中 YYYY 是你 Visual Studio.
的年份
下载后,将其安装到您的目标计算机上,然后 运行 您的应用程序。
安德鲁
标题几乎说明了一切。
我现在正在学习C++,决定尝试做一个游戏。我也想学C++,但是没有安装VS的朋友试了一下运行,开机就死机了
当我从 VS 外部 运行 时它很好,我将它以包含所有 DLL 的 ZIP 文件和发布版本发送给他。不确定为什么会这样,有人有什么想法吗?
这是代码,写得比较烂,可读性差(抱歉。)
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>
int main()
{
HWND hWnd = GetConsoleWindow();
ShowWindow(hWnd, SW_HIDE);
bool gameover(1);
sf::RenderWindow window(sf::VideoMode(240, 500), "Hangman but not very good.");
sf::Text text;
sf::Font font;
sf::Sprite sprite;
sf::Texture texture;
texture.loadFromFile("0.png");
sprite.setTexture(texture);
char uInput[11] = {0};
char displayed[11] = {0};
bool setup = false;
int charCount(0);
int iii(0);
bool correct(0);
long long wrongGuesses(0);
int wordlength(0);
long long gameoverCounter(0);
char currentGuess = 0;
bool bypass = true;
char pngC = '1';
char IOarray[] = "x.png";
bool firstSetup = true;
int correctCounter = 0;
font.loadFromFile("Xefus.ttf");
text.setColor(sf::Color::Yellow);
text.setCharacterSize(24);
text.setFont(font);
text.setString("Please enter the word to guess, press enter to stop");
while(window.isOpen())
{
sf::Event event;
while(gameover)
{
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
if(event.type == sf::Event::TextEntered)
{
bypass = true;
if(iii < 10 && !setup)
if(event.text.unicode < 128 && event.text.unicode > 96)
{
uInput[iii] = static_cast<char>(event.text.unicode);
++iii;
++wordlength;
}
{
for(int i = 0; i < wordlength; ++i)
if(event.text.unicode == uInput[i] && !firstSetup)
{
displayed[i] = uInput[i];
bypass = false;
++correctCounter;
}
else if(bypass = true)
++wrongGuesses;
}
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
setup = true;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace))
{
uInput[iii] = 0;
iii -= 1;
}
}
if(!setup)
{
text.setString(uInput);
displayed[wordlength - 1] = ('*');
setup = false;
}
else
{
text.setString(displayed);
bypass = false;
if(firstSetup)
{
firstSetup = false;
gameoverCounter = 0;
wrongGuesses = 0;
correctCounter = 0;
}
if(wrongGuesses >= wordlength)
{
++gameoverCounter;
wrongGuesses = 0;
IOarray[0] = static_cast<char>(gameoverCounter + 48);
texture.loadFromFile(IOarray);
}
if(gameoverCounter >= 9)
{
return 0;
window.clear();
window.draw(sprite);
window.draw(text);
window.display();
}
if(correctCounter >= wordlength)
{
return 0;
window.clear();
window.draw(sprite);
window.draw(text);
window.display();
}
wrongGuesses = 0;
}
window.clear();
window.draw(sprite);
window.draw(text);
window.display();
}
}
}
出现此类问题的原因之一是缺少 dll。因此,请确保系统上有所有依赖的 dll。
我们在复制依赖库时常犯的一个错误是我们忘记复制 运行 任何 C++ 应用程序都需要的 c++ 运行 time dll。此库与 visual studio 一起安装,这就是应用程序 运行 在您的系统上而不在您朋友的系统上的原因。
C++ 运行 时间库是:msvcr、msvcrt、msvcp
您还可以使用 Dependency Walker 软件检查任何其他缺失的依赖项。
希望对您有所帮助
Vikash 是对的,这是缺少 运行time 库的情况。您需要做的是在您的目标计算机上安装正确的 Redistributable 软件包。
Google 并下载适合您的应用程序的版本:
"Visual C++ Redistributable for Visual Studio YYYY" 其中 YYYY 是你 Visual Studio.
的年份下载后,将其安装到您的目标计算机上,然后 运行 您的应用程序。
安德鲁