Miten saa aloitettua ohjelmalla toisen ohjelman? Pitäisi seuraavat asiat saada:
1)ohjelma aukeaa uudessa ikkunassa
2)ohjelma ei ole ms-dos-ohjelma
3)uuteen ohjelmaan saa vanhasta muuttujia.
Käytössä Dev-cpp + SDL + w2k. Jonkin esimerkkiohjelman aukaisu voisi auttaa, olen huono ymmärtämään koodia. Tavoitteena on saada ohjelmalla aukaistua itse tehty peli ja antaa parit muuttujat mukaan.
Muuttujat joudut antamaan komentoriviparametreina tai väliaikaisen tiedoston kautta, ellet jaksa a) leikkiä Windowsin pipe-systeemillä (melkein sama mutta mutkikkaampi kuin väliaikaistiedosto) tai b) tutustua johonkin jaetun muistin kirjastoon (säätämisen jälkeen helppo, mutta aika moni kirjasto taitaa tarvita DLL:n ohjelman mukaan).
// Parametrit ohjelmalle jotenkin... Stringstream on tietysti C++:ssa kiva, kun siinä ei tarvitse pelätä puskurin koon takia. char parametrit[128]; sprintf(parametrit, "%i %f", intmuuttuja, floatmuuttuja); // Ajetaan HINSTANCE hInst = ShellExecute( 0, "open", // Käynnistetään "C:\\ohjelma.exe", // Tuollainen parametrit, // Tällaisella komentorivillä "C:\\WINDOWS\\TEMP\\", // Tähän työkansioon SW_SHOW // Saa näkyä ); if (hInst == NULL) { // Ei käynnistynyt. :( }
Kiitos! Tarpeeksi yksinkertainen jotta minäkin saan siitä selvää :)
Jaetun muistin käyttämiseen ei tarvita sen kummemmin ylimääräisiä kirjastoja kun putkienkaan. Ihan perus win32 APIa ne ovat. Samaan API-kasaan menee sitten mailslotit ja socketit. Unohtuiko jotain...? Copydatakin menee ilman lisäkirjastoja.
[linker error]-virheitä löytyy. Esimerkkinä [Linker error] undefined reference to 'std::string::size() const'
Mikä pielessä? tarvitsenko windows- tai std-linkkerin projektin asetuksiin?
EDIT:Vai onko väärässä paikassa? Sijoitin int mainiin (int argc ja char *argv[]), #includesta löyty valmiina stdlib.h, iostream sekä windows.h.
No virheestä päätellen pitäisi olla myös #include <string>
.
Luulen, että nuo includet kannattaisi olla #include <windows.h>
, #include <cstdlib>
ja - kuten Metabolix ehdotti - #include <string>
. Näin siksi, kun ilmeisesti kuitenkin ollaan Windows-ohjelmoimassa (windows.h
ekaksi, niin tulee vähemmän harmeja) C++:lla (C-standardiheaderit tyyliin cstdlib
) ja string-luokkaakin meinataan käyttää. Ja ellei erityisesti ole tekemässä konsoliohjelmaa, #include <iostream>
on tarpeeton.
Vaikka virheilmoitus tulee linkkeriltä, se luultavasti johtuu puuttuvasta include-tiedostosta. Kun kääntäjä ei ole nähnyt size
-funktion määrittelyä, se tekee oletuksia, joiden perusteella linkkeri sitten yrittää löytää jostain jotain olematonta.
Sitten vielä semmoinen juttu tuolta ylempää, että %f on huono yhdistelmä sprintf
:n kanssa. Äffällä kun voi tulostua melkein miten pitkä numeropötkö tahansa ja joskus se on muutenkin vähän arvaamaton.
Toimii :)
Vielä sen verran pitää kysyä, että miten avatun ikkunan saa päälle? Tällä hetkellä aukaisija-ikkuna jää aktiivisena päälle...Vai voiko johtua siitä, että aukaistu ohjelma on suoritettu (tällä hetkellä se vain kirjoittaa "jee" ruudulle)?
Anteeksi tuplaposti, mutta en saanut muokattua enää. Sitä vaan, että miten saan fstreamin mukaan? Tulee taas linker erroria jos laitan sen. Ja tarvisin sitä ohjelmassa.
Miten olisi #include <fstream>
?
Öh...mutta sillon tulee ne samat vanhat [linker error]it. Onko SDL:ssä mitään juttuja tiedostojen lukemiseen ja kirjoittamiseen?
EDIT: en tarvitsekaan sitä enää. Voinhan syöttää luvun toiselle ohjelmalle, jossa on fstream : )
Samat vanhat errorit, siis mitkä?
Ettei vain olisi unohtunut koodissa fstream
:in edestä std::
tai sopiva using-määrittely pois?
Luvun syöttäminen toiselle ohjelmalle kuulostaa tässä yhteydessä ihan älyttömältä.
hmm... tällä hetkellä ainoa using on
using namespace std;
Voiko aukaistuun ohjelmaan saada aukaisijan funktioita? Voiko lukuja lähettää taaksepäin?
KoodiNoppa kirjoitti:
Voiko aukaistuun ohjelmaan saada aukaisijan funktioita? Voiko lukuja lähettää taaksepäin?
Ei - tai pitkän ja vaivalloisen tien kautta kyllä. Siis tosi paljon suurempi ongelma kuin mitä ilmeisesti olet ratkaisemassa. Olisiko muuten suurikin vaiva kertoa, että mitä virheilmoituksia tulee ja millaisesta koodinpätkästä niitä tulee?
Olisi :D
compiler ei kerro missä päin virhe on, mutta seuraavat virheet löytyy:
[linker error] undefined reference to 'std::string::size() const'
[linker error] undefined reference to 'std::ios_base::init::init()'
[linker error] undefined reference to 'std::ios_base::init::~init()'
[linker error] undefined reference to 'std::string::operator[](unsigned int) const'
[linker error] undefined reference to 'std::string::operator[](unsigned int) const'
[linker error] undefined reference to 'std::string::operator[](unsigned int) const'
#include <string> #include <windows.h> #include <fstream> #include <iostream> #include <cstdlib>
Onhan Dev-C++:n asetuksissa projektin tyyppinä C++ eikä C?
On...ja lähdetiedosto(oikea nimi?) on .cpp-muotoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.