2015-05-02 95 views
1

标题几乎说明了一切。不能在没有Visual Studio的PC上运行版本构建

我正在学习C++,并决定尝试制作游戏。我的朋友也想学习C++,但没有安装VS,试图运行它,它在启动时崩溃。

当我从VS外部运行它时,它很好,我将它发送给ZIP文件,包含所有DLL和发布版本。不确定为什么会发生这种情况,任何人有任何想法?

下面是代码,它相当写的不好和可读性差(对不起)。

#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(); 
     } 
    } 
} 
+1

在不同的PC上运行该程序时出现的确切错误消息是什么? –

+0

您是否试图将所有依赖关系包含在[静态链接]中(http://stackoverflow.com/questions/37398/how-do-i-make-a-fully-statically-linked-exe-with-visual-studio -express-2005)exe? – mins

+0

感谢您的回复,我应该静态链接SFML还是只是在您发布的帖子中提到的那个? @分钟? –

回答

0

Vikash是正确的,这是缺少运行库的情况。您需要的是在目标计算机中安装正确的Redistributable软件包。

谷歌和下载应用程序的相应版本:

的Visual C++可再发行的Visual StudioYYYY” 里YYYY是你的Visual Studio的一年。

下载后,将其安装到目标计算机上,然后运行您的应用程序。

Andrew

+0

Is there任何方法都可以,或者它是所有应用程序的标准吗? –

+0

这是最简单的方法,更困难的方法是使用Dependency Walker,确定应用程序需要什么DLL然后创建一个安装程序/软件包。与您的应用程序一起在同一个文件夹中。 –

+0

好的,非常感谢您的回复c: –

0

其中的一个原因这种类型的问题是缺少DLL文件。因此,请确保您的系统上有所有可用的dll。

我们在复制依赖库时所犯的一个常见错误是,我们忘记复制运行任何C++应用程序所需的C++运行时dll。这个库与Visual Studio一起安装,这就是为什么应用程序在您的系统上运行,而不是在您的朋友的。

C++运行时库:msvcr,MSVCRT,msvcp

您也可以使用Dependency Walker中的软件来检查任何其他缺少的依赖关系。

希望它可以帮助

相关问题