Yugi Moto Postado Janeiro 31, 2007 Denunciar Share Postado Janeiro 31, 2007 bem, estou executando um programa com paramentos, usando o "winexec".mas como ele carrega paramentos, inclusive endereço de "IP", eu estou usando um arquivo .INI para pegar o IP.mas ele não funciona.vejam o código: procedure TForm1.ImageButton1Click(Sender: TObject); var Name : PChar; TempName : PChar; Ini: tinifile; begin try Ini := TiniFile.create('config/config.ini'); Name := 'Dummy Text'; TempName := PChar(Name); GetWindowText(Handle, TempName, Length(Name)); Name := PChar(TempName); WinExec(PChar('demo.exe @MY_ASS@ _server' + Ini.readstring('site', 'patch', 'about:Erro')), sw_ShowNormal); finally Ini.Free; end; end; bem, o .INI também está certo, mas vou postar aqui também. [site] server = google.com reg = irose.iwamotoweb.com img = skin/yugi.jpg patch = 127.0.0.1 bem já estou a um bom tempo quebrando a cabeça com este código, ai se alguém puder ajudar !!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 31, 2007 Denunciar Share Postado Janeiro 31, 2007 Yugi Moto, sobre o uso de try..finally..end: você só pode usar o finally para liberar a classe com segurança se você antes alocou uma instância para ela. Imagine que se colocando o create da classe dentro do try e ocorrer um erro justamente neste método, não haverá uma instância alocada para o mesmo e, portando, você estará sugeito a erros ao tentar liberá-la no finally. A regra é: aloque uma instância para a classe e, daí sim, se ocorrer algum erro ou não, ao acessar ele, você libera ao final Ini := TiniFile.create('config/config.ini'); try // faz alguma coisa com o arquivo ini finally Ini.Free; end; O que é que você pretende com isto? Name := 'Dummy Text'; TempName := PChar(Name); GetWindowText(Handle, TempName, Length(Name)); Name := PChar(TempName); Quanto a parte do WinExec, sugiro que você faça da seguinte forma:var CommandLine :string; ... begin ... CommandLine := Format('demo.exe @MY_ASS@ _server%s', [Ini.readstring('site', 'patch', 'about:Erro')]); WinExec(PChar(CommandLine), sw_ShowNormal); ... end;usando a função format, você substituirá o %s (variável string) pelo valor passado no array. Assim, você poderá colocar um break-point na montagem do texto CommandLine e executando passo-a-passo (F8), visualizar seu conteúdo (CTLR+F7) sobre o nome da variável.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Janeiro 31, 2007 Denunciar Share Postado Janeiro 31, 2007 @Micheussim, concordo com você, mas é que neste modo, o programa não é executado, ele não retorna nenhum erro, mas não funciona nada !!!eu sei que no modo que eu estava fazendo não é o correto, mas o programa era executado, mas não carregava os paramentos do arquivo .INI Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yugi Moto Postado Janeiro 31, 2007 Autor Denunciar Share Postado Janeiro 31, 2007 @Micheussim, concordo com você, mas é que neste modo, o programa não é executado,ele não retorna nenhum erro, mas não funciona nada !!!eu sei que no modo que eu estava fazendo não é o correto, mas o programa era executado, mas não carregava os paramentos do arquivo .INI Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yugi Moto Postado Fevereiro 3, 2007 Autor Denunciar Share Postado Fevereiro 3, 2007 @Micheusdeixei o código como você indicou, mas acontece os mesmos erros, ele executa o programa, mas não carrega o IP, ou seja não roda corretamente... procedure TForm1.ImageButton1Click(Sender: TObject); var Ini: tinifile; CommandLine :string; begin try Ini := TiniFile.create('config.ini'); CommandLine := Format('demo.exe @MY_ASS@ _server%s', [Ini.readstring('site', 'patch', 'about:Erro')]); WinExec(Pchar(CommandLine), sw_ShowNormal); finally end; end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 3, 2007 Denunciar Share Postado Fevereiro 3, 2007 Yugi Moto, primeiramente, corrija o código pois você esqueceu do Ini.Free e colocou o create do Ini dentro do try - deve ser antes. Fica assimprocedure TForm1.ImageButton1Click(Sender: TObject); var Ini: tinifile; CommandLine :string; begin Ini := TiniFile.create('config.ini'); try CommandLine := Format('demo.exe @MY_ASS@ _server%s', [Ini.readstring('site', 'patch', 'about:Erro')]); WinExec(Pchar(CommandLine), sw_ShowNormal); finally Ini.Free; end; end;deixei o código como você indicou, mas acontece os mesmos erros, ele executa o programa, mas não carrega o IP, ou seja não roda corretamente...me explique o seguinte:1) você debugou o programa como lhe sugeri para que você consiga visualizar o conteúdo da string CommandLine e avaliar se realmente ela não está carregando os dados do arquivo ini?2) O program demo.exe é um programa seu ou de terceiro?3) quantos e quais os parâmetros esperados pelo programa demo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yugi Moto Postado Fevereiro 4, 2007 Autor Denunciar Share Postado Fevereiro 4, 2007 1)Sim eu criei as break-point, como você pode ver na foto abaixo:Apesar de não entender muito do breakpoint, acho que não aparenta erros certo ??2) o programa Demo.exe é de terceiro.3) no atalho do programa ele tem o seguinte:demo.exe @TRIGGER_SOFT@ _server 127.0.0.1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 4, 2007 Denunciar Share Postado Fevereiro 4, 2007 1)Sim eu criei as break-point, como você pode ver na foto abaixo:Apesar de não entender muito do breakpoint, acho que não aparenta erros certo ??o break-point por si só não diz nada. Na figura, observe que o break que você marcou na declaração de CommandLine é inválido. Só podem haver válidos aonde você observar que tem aquelas "bolinhas azuis". beleza?!O que vai realmente lhe ajudar em alguma coisa, é aquele break na linha: WinExec(....).Quando você está executando o programa e ao clicar o botão Button1, ao parar a execução do programa nela, você pode avaliar o conteúdo da sua string CommandLine. Para isto você pode simplesmente posicionar o cursor sobre o nome da mesma (na linha anterior) e teclar CTRL+F7. Vai aparecer uma janela de avaliação (Evaluate/Modify) aonde você poderá observar como ficou o texto formatado. Daí você vai ter certeza de que está realmente havendo ou não um problema com a leitura do arquivo ini - se não houver sua linha de comando estará correta e o problema pode ser outro. Para continuar a execução, após a parada no break, você pode utilizar F8 (continha execução linha-a-linha, na verdade quase isso) ou F9 para executar o programa sem paradas (exceto se passar novamente por algum break). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yugi Moto Postado Fevereiro 5, 2007 Autor Denunciar Share Postado Fevereiro 5, 2007 Ok, Micheus ele está carregando o arquivo .INI, e a linha para o arquivo, veja na foto:porem, ele não está dando o "ESPAÇO" e acredito que seja isso o problema !!!tentei colocar o espaço no arquivo .INI, mas não adiantou, ele fica na mesma. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 5, 2007 Denunciar Share Postado Fevereiro 5, 2007 Yugi Moto, neste caso, a falha está no meu exemplo. Troque:CommandLine := Format('demo.exe @MY_ASS@ _server%s', [ini.readstring('site', 'patch', 'about:Erro')]);porCommandLine := Format('demo.exe @MY_ASS@ _server %s', [ini.readstring('site', 'patch', 'about:Erro')]);Ou seja, acrescente o espaço antes do %s (%s é o lugar onde a string lida será inserida). Caso, corrigido isto, ainda não haver a execução esperada, então o problema reside noutro ponto.Bom, agora você também já sabe utilizar melhor o break-point e evaluate/modify, isto lhe ajudará bastante no processo de "debugar" suas aplicações.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Yugi Moto Postado Fevereiro 7, 2007 Autor Denunciar Share Postado Fevereiro 7, 2007 Sim, obrigado pela sua ajuda novamente Micheus.desculpe qualquer coisa, e mais uma vez obrigado.Tudo de bom rapaz !!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Yugi Moto
bem, estou executando um programa com paramentos, usando o "winexec".
mas como ele carrega paramentos, inclusive endereço de "IP", eu estou usando um arquivo .INI para pegar o IP.
mas ele não funciona.
vejam o código:
bem, o .INI também está certo, mas vou postar aqui também.bem já estou a um bom tempo quebrando a cabeça com este código, ai se alguém puder ajudar !!!
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.