1

Тема: Необроблене виключення при запуску программи поза середовщем QtCreator

Доброго дня.

Є такий код:

#include <iostream>
#include <fstream>
#include <string>

std::string s_FileName = "shader.vert";
std::string s_ExecDir;

std::string getExecDirString(int argc, char* argv[])
{
    std::string s_ExecPathFull = std::string(argv[0]);

#ifdef _WIN32
    std::size_t pos = s_ExecPathFull.rfind("\\");
#else
    std::size_t pos = s_ExecPathFull.rfind("/");
#endif

    if (pos != std::string::npos)
    {
        std::string s_ExecPath = s_ExecPathFull.substr(0, pos);
        return s_ExecPath;
    }
    else
    {
        return std::string("");
    }
}


class Shader
{
public:
    Shader(std::string strFileName)
    {
        static std::fstream fin(strFileName);

        if (!fin.is_open())
            return;

        std::string strLine = std::string("");
        std::string strText = std::string("");

        while (std::getline(fin, strLine)) {
            strText = strText + "\n" + strLine;
        }

        fin.close();

        std::cout << strText << std::endl;
    }

};

int main(int argc, char* argv[])
{
    s_ExecDir = getExecDirString(argc, argv);

    Shader shader(s_ExecDir + "\\" + s_FileName);

    return 0;
}

при сборці помилок не видає, але якщо запустити із середовищя QtCreator то все, нормально, а якщо із консолі або через "провідник" то вискакує необроблене виключення.

Що я роблю не так? :)

2

Re: Необроблене виключення при запуску программи поза середовщем QtCreator

Наскільки мені відомо, то під час запуску із-під QtCretor-a, то QtCore.dll і інші бібліотеки, які потрібно середовище само підсовує. А якщо запускати вручну із консолі, то сама exe-шка не взмозі іх знайти. Тому спробуйте підсунути в каталог із програмою ще і їх. Щоб спростити собі життя із залежностями бібліотек, можна скористатись програмою Dependency Walker

(function(){
  console.log("called anonymously");
})()

3 Востаннє редагувалося DartRomanius (23.06.2015 20:35:46)

Re: Необроблене виключення при запуску программи поза середовщем QtCreator

muhasjo написав:

Наскільки мені відомо, то під час запуску із-під QtCretor-a, то QtCore.dll і інші бібліотеки, які потрібно середовище само підсовує. А якщо запускати вручну із консолі, то сама exe-шка не взмозі іх знайти. Тому спробуйте підсунути в каталог із програмою ще і їх. Щоб спростити собі життя із залежностями бібліотек, можна скористатись програмою Dependency Walker

Ні, проект не Qt-шний.... дякую.
Якщо проект qt-шний, та немає бібліотек, воно матюкається на відсутність dll....

4 Востаннє редагувалося mike (23.06.2015 20:40:08)

Re: Необроблене виключення при запуску программи поза середовщем QtCreator

DartRomanius написав:
muhasjo написав:

Наскільки мені відомо, то під час запуску із-під QtCretor-a, то QtCore.dll і інші бібліотеки, які потрібно середовище само підсовує. А якщо запускати вручну із консолі, то сама exe-шка не взмозі іх знайти. Тому спробуйте підсунути в каталог із програмою ще і їх. Щоб спростити собі життя із залежностями бібліотек, можна скористатись програмою Dependency Walker

Ні, проект не Qt-шний.... дякую.
Якщо проект qt-шний, та немає бібліотек, воно матюкається на відсутність dll....

Ну так, я не звернув уваги на то що в коді немає нічого qt-шного.
А якщо компілити це через Qt а вручну?

(function(){
  console.log("called anonymously");
})()

5

Re: Необроблене виключення при запуску программи поза середовщем QtCreator

muhasjo написав:
DartRomanius написав:
muhasjo написав:

Наскільки мені відомо, то під час запуску із-під QtCretor-a, то QtCore.dll і інші бібліотеки, які потрібно середовище само підсовує. А якщо запускати вручну із консолі, то сама exe-шка не взмозі іх знайти. Тому спробуйте підсунути в каталог із програмою ще і їх. Щоб спростити собі життя із залежностями бібліотек, можна скористатись програмою Dependency Walker

Ні, проект не Qt-шний.... дякую.
Якщо проект qt-шний, та немає бібліотек, воно матюкається на відсутність dll....

Ну так, я не звернув уваги на то що в коді немає нічого qt-шного.
А якщо компілити це через Qt а вручну?

Якщо вручну, тоді працює норм. Але, QtCreator свій екземпляр mingw використовує...