Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kahden ohjelman ajo yhdellä komennolla

Sivun loppuun

sydetys [22.12.2008 05:55:15]

#

Olisi sellasta kysyttävää, joka on tosi noob mutten oikeen osaa lähteä hakemaan kun en tiedä sitä parasta hakusanaa. Googlaus ainakin tuotti muita tuloksia, niinpä kysäsen guruilta. Jo kerran sain täältä hyviä vinkkejä assemberiin.

eli olen kyllästynyt ajamaan erikseen kahta ohjelmaa (.exe) ja nyt olisi kiva oppia (c++ / visual studio 2008 pro / OS = Win Vista x64)
miten nämä kyseiset tiedostot saisi yhdistettyä yhdeksi. Jokin linkityshän se on,
mutta olen vasta lukenut c++ alkeita ja tutustunut perus c++:n ja windowsin ohjelmoinnin eroihin vähäsen. eli tahtoisin A.exe + B.exe --> C.exe, ohjelma C ajaisi sitten 1.:nä A:n täydellisesti ja jatkaen sitten automaattisesti ohjelmaan B. En osaa asennella mitään windows installerin kanssa joten oletus on että C.exe sijaitsisi siellä missä ohjelmat A ja B sijaitsee.
Vai saisiko C,exe:n sisään A.exe:n ja B.exe:n niin ei tarvitsisi turhia pikku tiedostoja sotkemaan.

Jos ei muuta ni jokin linkki olisi kiva.

kiitokset

Grez [22.12.2008 06:39:18]

#

copy con c.bat
A.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
B.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
^Z

TsaTsaTsaa [22.12.2008 12:01:56]

#

Jos A ja B on itsesi koodaamia ohjelmia, niin voit tietty muuttaa niiden main-funktioiden nimet tyyliin int a_main(), int b_main() ja sitten tehdä varsinaisen mainin C-ohjelmaan:

#include <iostream>

extern int a_main();
extern int b_main();

int main(int argc, char* argv[])
{
   // Suoritetaan A:n main-funktio
   if ( a_main() != 0 )
   {
      std::cerr << "A-ohjelmassa virhe!\n";
      return 1;
   }
   // Suoritetaan B:n main-funktio
   if ( b_main() != 0 )
   {
      std::cerr << "B-ohjelmassa virhe!\n";
      return 1;
   }
   return 0;
}

Ja sitten kääntää A.cpp, B.cpp ja C.cpp kerralla.

EDIT: Niin ja tämä versio ei siis suorita B:tä jos A:ssa sattuu virhe.
EDIT2: Ja tietenkin a_mainiin ja b_mainiin voi laittaa parametreiksi myös nuo argc ja argv jos tarvitsee komentoriviparametreja.

Deffi [22.12.2008 12:45:40]

#

sydetys kirjoitti:

A.exe + B.exe --> C.exe

Googlesta vastaavanlaisia ohjelmia löytyy hakusanoilla file binder/joiner. "Binderin" koodaaminen on tosin ihan hyvä harjoitus, jos jostain syystä assembly ja Windowsin PE-tiedostoformaatti kiinnostaa. Toki jos sinulla on molempien ohjelmien lähdekoodit, voit yrittää yhdistää niitä TsaTsaTsaan mainitsemalla tavalla.

sydetys [22.12.2008 12:53:00]

#

just, no kyse on lähinnä raa´an launcherin, tekemisestä jo compiloiduille sovelluksille jotka on jo .exe muodossa. Ja tottakai toinen ohjelma on pieni joka vain on hyödyllinen esim. puhistaisi RAMin tauhkasta. niin kauan ku en osaa RAMin käsittelyä niin joudun käyttämään GNU ohjelmaa testissäni.

paljon on juttua tiedostojen read / write (i/o) systeemistä, muttei mitään "execute" tyylistä.

otin tuon edellisen esimerkin kuitenkin muistiin jos tarvitsee joskus.

toki kuten aivan edellä mainittiin voisi tehdä .bat tiedoston mutta tahdon oppia c++:aa, en windows/system kieltä.

löysin tämän esimerkin jostain foorumilta:

void runsystem (string)

int main()
{
string cmm;
cmm="universe.exe";
runsystem (cmm)
}

void runsystem(string cmm)
{
system(cmm.c_str());
}

eli tuon pitäisi vain ajaa "universe.exe" sovellus. helppohan siihen on
sitten lisätä toinenkin sovellus.

toimiiko ihan tollain, vai onko kysesssä Linux koodia kun näyttää vähän oudolta, varsinskin viimeinen rivi: system(cmm.c_str()); tai sitten olen törmännyt johonki ihan uuteen...minulle.

Mod. lisäsi kooditagit

Spongi [22.12.2008 13:25:35]

#

Kyllä system() kuuluu ihan standardiin.

Metabolix [22.12.2008 17:23:59]

#

system-funktion parametri annetaan sellaisenaan komentoriville, eli ota komentoriville antamasi ajokomennot ja lisää jokaisen alkuun system(" ja loppuun ");. Toki on paljon järkevämpää tuollaisessa tilanteessa käyttää tavallista skriptiä, Windowsissa siis .bat-päätteistä tiedostoa.

hyprE [29.12.2008 21:07:52]

#

Eli maallikon termein:

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    system("A.exe"); // ajaa ohjelman A.exe
    system("B.exe"); // ja B.exe

    return 0;
}

tesmu [05.01.2009 00:13:01]

#

Tuossa on vaan ongelmana se, että system odottaa kunnes A.exe on suoritettu ja sitten vasta suorittaa B.exe:n

Metabolix [05.01.2009 09:08:23]

#

tesmu kirjoitti:

Tuossa on vaan ongelmana se, että system odottaa kunnes A.exe on suoritettu ja sitten vasta suorittaa B.exe:n

Niinhän kysyjä pyysikin.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta