Toon posts:

[C++] het starten van een app in de huidige app

Pagina: 1
Acties:
  • 62 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi GOT' ers,

Misschien is de titel van mijn topic een beetje onduidelijk. Ik zal proberen zo duidelijk mogelijk te zijn.

Ik heb in c++ een GUI gebouwd. Wanneer ik de GUI run en op een knop druk moet er een ander applicatie gaan starten. Het is de bedoeling dat de opgestarte applicatie communiceert met de "main" applicatie.

heeft er iemand enig idee hoe ik dit voor elkaar krijgt?

hopelijk kunnen jullie mij helpen

greetz b

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Het runnen kan volgens mij gewoon met system(), maar die interactie hangt helemaal af van wat jij wil. Je bent niet echt duidelijk in je startpost over wat je nou echt wil communiceren...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Process opstarten zou ik met CreateProcess doen. Zoals NMe84 al zegt is het niet geheel duidelijk wat je nu precies aan communicatie wilt doen. Op MSDN zijn wel een paar aardige voorbeelden te vinden hoe je dat zou kunnen doen icm CreateProcess, bijvoorbeeld via pipes...

Verwijderd

Topicstarter
nou ik wil bijvoorbeeld notepad.exe of een of andere applicatie laten runnen bij het indrukken van een knop.

hier een voorbeeld:
ik voor in de "main"applicatie in een textfield wat data in. deze data moet doorgestuurd worden naar de opgestarte applicatie waarmee hij verschillende bewerkingen uit kan voeren en vervolgens de resultaten teruggeven aan de "main"applicatie.

omdat er maar 1 main in een applicatie aanwezig mag zijn is dit dus onmogelijk.

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 13-05 14:28

koli-man

Bartender!!!!

shellexecute in Borland,dacht ik
maar dat is alleen voor opstarten

[ Voor 36% gewijzigd door koli-man op 03-03-2004 12:13 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23:30

NMe

Quia Ego Sic Dico.

Ehm, je kan gewoon notepad.exe openen met de naam van een textbestand (al dan niet tijdelijk aangemaakt) dat je na het sluiten van notepad.exe uitleest en de veranderingen verwerkt. Volgens mij kun je niet zomaar met notepad communiceren omdat het daarvoor simpelweg niet bedoeld is.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
nou ik werk met visual c++ en gebruik een andere graphische toolkit om gui's mee te bouwen.

Wat ik wil bereiken is een applicatie opstarten (die ook in visual c++ is gemaakt) te laten runnen in de main applicatie.

een van de eisen is dat de source code van al mijn projecten portable moet zijn.

Ik zat eraan te denken om een aantal design patterns te gebruiken maar daar ben ik nog niet overuit.

hopelijk hebben jullie een oplossing voor dit probleem

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hoe ga je in hemelsnaam op een portable manier een applicatie starten en ermee communiceren, wat per definitie eigenlijk platform-dependant is? Of er moeten libraries bestaan die zowel onder win32 als linux geimplementeerd zijn, maar die ken ik verder niet. Je zoekwoorden zijn "inter-process communication" (en natuurlijk dingen als "library" en "C++" oid))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Waarom moet je een compleet ander process hebben? Is dat een bestaande applicatie? Zo ja, dan ligt daarmee je communicatie protocol al vast. Zo nee, waarom maak je van die functionaliteit dan geen library?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
.oisyn schreef op 03 maart 2004 @ 15:50:
Hoe ga je in hemelsnaam op een portable manier een applicatie starten en ermee communiceren, wat per definitie eigenlijk platform-dependant is? Of er moeten libraries bestaan die zowel onder win32 als linux geimplementeerd zijn, maar die ken ik verder niet.
App1: system("app2");
App2: fopen( "filename", "w" );
fwrite( ... );
fclose( )
App1: fopen( "filename", "r" );
fread( ... );
fclose( )

Portable, maar meestal niet ideaal.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Hoi mensen,

nou ik ben er achter gekomen dat je system() kan gebruiken.

als ik bijvoorbeeld notepad wil openen in mijn applicatie dan krijg je de volgende source code:

char commando[255]="notepad.exe"

system(commando);

alles werkt goed alleen verschijnt bij het opstarten ook de dos box. Hoe kan ik ervoor zorgen dat hij alleen de notepad toont zonder de dos box?

en wat ik ook in de gaten heb is dat de applicatie (die je wilt runnen) wel in de root moet zitten waar je project is opgeslagen.

is er misschien een mannier om ook dit te fixen?

hopelijk kunnen jullie mij helpen.

greetz benji en bedankt voor de voorgaande reactie

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 23:53

Reptile209

- gers -

Verwijderd schreef op 03 maart 2004 @ 18:34:
Hoi mensen,

nou ik ben er achter gekomen dat je system() kan gebruiken.

als ik bijvoorbeeld notepad wil openen in mijn applicatie dan krijg je de volgende source code:

char commando[255]="notepad.exe"

system(commando);

alles werkt goed alleen verschijnt bij het opstarten ook de dos box. Hoe kan ik ervoor zorgen dat hij alleen de notepad toont zonder de dos box?

en wat ik ook in de gaten heb is dat de applicatie (die je wilt runnen) wel in de root moet zitten waar je project is opgeslagen.

is er misschien een mannier om ook dit te fixen?

hopelijk kunnen jullie mij helpen.

greetz benji en bedankt voor de voorgaande reactie
char commando[255]="start c:\mijn path\notepad.exe /optie";
system(commando);

doet dat het beter?

Zo scherp als een voetbal!


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ten eerste heet dat een console, geen "dos box", ten tweede is die console zo platform-afhankelijk als het maar zijn kan, en is er dus ook geen platform-onafhankelijke manier om 'm weg te laten.

Je zou start kunnen gebruiken zoals Reptile209 hierboven al aangeeft, maar dan is het per definitie al niet meer portable, en kun je beter gewoon kijken naar de win32 functies CreateProcess of ShellExecute

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Reptile209 schreef op 03 maart 2004 @ 18:37:
[...]

char commando[255]="start c:\mijn path\notepad.exe /optie";
system(commando);

doet dat het beter?
nou dat werkt wel alleen krijg ik een vage melding. command prompt is in iedergeval weg. Is er misschien nog een ander mogelijkheid om dit probleem te fiksen?

dus naast sytem() ook andere mogelijkheden om applicaties te laten runnen (zonder windows commando's etc).


greetz b

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Gewoon met spawn() en dan dat hele start-gebeuren vergeten?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

b
Wij tweakers doen elkaar permanent de groeten. Het is dus niet nodig om steeds ruimteverspillende "greetz [user]" of iets dergelijks onder je post te plakken. Als je perse zoiets wilt kun je daar je signature voor gebruiken (zie latere uitleg).
Bovendien:
dus naast sytem() ook andere mogelijkheden om applicaties te laten runnen (zonder windows commando's etc).
Umh juist ja. Als je nou zelf ook eens wat moeite deed ipv elk wissewasje hier op GoT voor te leggen, zoals bijvoorbeeld wat zoekwerk in de manual oid (misschien roep ik nu wel iets heel raars hoor 8)7). Je bent al vaker gewezen op het feit dat je continu basic topics opent, maar je schijnt daar maar weinig aandacht aan te besteden :{ Nou ja, dan kan ik er ook niets meer aan doen, veel succes met je probleem nog

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.