Skocz do zawartości

[C++] uruchamianie zewnętrznej aplikacji z parametrami


drzajnek

Polecane posty

witam.

 

mam dwa problemy i proszę o pomoc.

 

pierwszy dotyczy konkretnie Visual C++.

 

chcę zrealizować coś takiego: program uruchamia inną aplikacją, dołączając do niej parametry określone przez użytkownika (np. wartości wpisane w textBox itp).

 

moje przemyślenia odnośnie tego zagadnienia:

 

wiem już, że celem otworzenia przez aplikację innej aplikacji można skorzystać z funkcji ShellExecute (albo ShellExecuteA).

 

KODHINSTANCE ShellExecute(

HWND hwnd,

LPCTSTR lpOperation,

LPCTSTR lpFile,

LPCTSTR lpParameters,

LPCTSTR lpDirectory,

INT nShowCmd

);

 

jak wpiszę od razu, że argument lpParameters jest np. "20", to wszystko jest ok. ale co, gdy chcę użytkownikowi pozwolić, żeby to on określił ten parametr? żeby program skorzystał z zawartości np. textBoxa i wykorzystał ją jako parametr. typ LPCSTR (z niego korzysta funkcja ShellExecuteA), Long Pointer to Constant STRing - constant string? czyli nie można tu żadnych zmiennych zastosować?

 

jeśli nie da się zrealizować tego zadania przy użyciu funkcji ShellExecute czy ShellExecuteA, to czy istnieje jakakolwiek procedura w VC++, która na to pozwoli? jest też bodaj CreateProcess, ale w moim wypadku daje efekt podobny do powyższego, jak nie słabszy.

 

--------

 

druga sprawa dotyczy również C++, w moim wypadku chodzi o aplikację OpenGL, ale przypuszczam, że to nie ma wielkiego znaczenia.

 

chcę przypisać zmiennej typu int wartość parametru (który jak wiadomo jest stringiem). wydaje mi się, że powinno to wyglądać następująco:

 

KODint x = (int)__argv[1];

 

nie ma tu żadnego błędu, program się kompiluje.. no ale nie działa, nie przypisuje zmiennej x wartości podanego parametru. podobnie nie działa "uproszczona wersja":

 

KODif(__argv[1]=="10") x = 10;

 

mimo że uruchamiam program z parametrem 10, wynik porównania jest negatywny. nigdzie nie mogę znaleźć informacji, które by pomogły mi rozwikłać ten problem.

Link do komentarza
Udostępnij na innych stronach

Pytanie 1.: zamień to wszystko na string, potem tylko zmiennaString.c_str() w tym Twoim ShellExecute.

 

Pytanie 2: to nie działa, bo nie da się tak zrzutowac. Albo użyj atoi, poczytaj na necie co to za funkcja, albo zamień to na string i potem funkcją StrToInt, do której link masz tutaj: http://www.unit1.pl/95,txt

Nie działa Ci też to porównywanie, po w ten sposób porównujesz wskaźniki, nie faktyczną "treść" tekstu. Jak chcesz porównywać, to musisz skorzystać z funkcji cmpstr czy jakoś tak, nie pamiętam jak to się nazywa, pogooglaj.

 

I w ogóle to szpinak na obiad ze nie googlanie, o! Hm. Tylko nie mów, że lubisz szpinak ; p

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

umieszczę tutaj rozwiazania moich problemów, moze komuś się to przyda :)

 

pierwsza rzecz - sprawa okazala sie banalna:

 

trzeba uwzglednic

 

KOD#include <stdio.h>

#pragma comment(lib, "shell32.lib")

 

a w wywołaniu funkcji po prostu:

 

KODchar bufor[10];

sprintf_s(bufor,"%1.0f",Convert::ToDouble(textBox1->Text));

ShellExecuteA(0, "open", "program.exe", bufor, NULL, SW_SHOW);

 

i juz mozna dawac co sie chce jako parametr, git

 

jesli chodzi o drugi problem to istotnie jest tak, atoi lub atof i gra - dzieki.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...