C++ passagem de parâmetros

Olá!

Preciso fazer o seguinte em C++:

Eu criei uma aplicação e gerei o seu executável: restart.exe, mas eu precisaria chamar esse restart.exe passando algum parâmetro junto…alguém sabe se é possível fazer isso usando C++?

obrigada!!

Dá sim, e o esquema é muito parecido com o do Java. Exemplo:

Vou dar um exemplo.

#include <iostream>
using namespace std;

int main (int argc, char *argv[]) {
    for (int i = 0; i < argc; ++i) {
        cout << i << "=" << argv[i] << endl;
    }
}

argc é a contagem de parâmetros (parecido com args.length no Java)
argv[0] é o nome do executável do programa, argv[1] o primeiro parâmetro, e assim por diante.

Olá!

Estou usando o seguinte:

int WinMain(
  HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,
  int nCmdShow
);

No atributo lpCmdLine estão os 2 parâmetros passados para a minha aplicação, esses parâmetros vem separados por espaço. Como posso guardar cada parâmetro em uma variável? Alguma dica?

Obrigada!

Hum, ordinariamente quando você usa WinMain (em vez de main), realmente você tem de quebrar o comando segundo os espaços e aspas.

Se você está usando a biblioteca Boost, pode usar boost::split: http://stackoverflow.com/questions/4224935/splitting-the-string-using-boostalgorithmsplit

Se estiver usando a Qt, pode usar split: http://stackoverflow.com/questions/8582138/how-can-i-split-a-string-according-to-delimiters-in-qt

Obrigada pelas dicas.

Para separar os parâmetros em tokens contei com a ajuda da função strtok(), mas fiz um exemplo com string mesmo e não com o tipo LPTSTR.

Agora estou pesquisando como converter LPTSTR para string para pode usar strtok() no projeto… se alguém tiver alguma dica…

Vlwww!

Dona Carina,

Uma coisa que vai lhe ajudar bastante, quando for fazer programas em Windows API, é que 99% do tempo você não precisa usar Unicode e sim somente ANSI. Portanto, você pode supor que LPCTSTR, LPTSTR etc. são respectivamente const char * e char *, e fazer a conversão direta de char * para std::string.

(Veja a opção de compilação, não deve ser a default, que é Unicode, e sim a “Multiple Byte Code etc.” - veja nas propriedades do projeto.)

(É claro que eu sei que seu nome é com a letra K :slight_smile: )

Outra coisa: a menos que seja para um projeto que não pode usar std::string ou a string do Qt de jeito nenhum, não use strtok. Essa função tem um defeito incorrigível, que é o de estragar a string original. Isso pode dar muita dor de cabeça.

Como assim estragar a string original?

Vamos supor que a string original fosse:

char *s = "O rato roeu a roupa do rei de Roma";

Após você usar o strtok para varrer todas as substrings, a string acaba ficando mais ou menos assim (vou usar “|” para indicar o caracter \000 ou NUL):

char *s = "O|rato|roeu|a|roupa|do|rei|de|Roma";

Isso pode provocar um erro esquisito nos seus programas, que é difícil de debugar.