Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2009
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
PChar y PAnsiChar en WinExec

Hola Compañeros,

Les tengo la siguiente inquiteud:

Tengo una instrucción en Delphi 7 de la siguiente manera:

Código:
WinExec(PChar('Ejecutable.exe '+Parametros),SW_SHOWNORMAL);
Al migrar a Delphi 2009 encontré que la función WinExec ahora recibe como primer parametro un AnsiChar en lugar de un PChar...

Tambien, al navegar en algunos foros encontré que la solución sencilla es reemplazar todos los PChar por un PAnsiChar, asi:

Código:
WinExec(PAnsiChar('Ejecutable.exe '+Parametros),SW_SHOWNORMAL);
No se si esté equivocado o haya interpretado mal, pero eso no me funcionó pues al testear el resultado con un showmessage de ambas funciones, el resultado de :


Código:
ShowMessage(PAnsiChar('Cadena de texto'));
Es solo el primer caracter de la cadena, a diferencia de PChar que si la muestra completa...

¿Quién ya ha pasado por esto?

les agradezco,
Responder Con Cita
  #2  
Antiguo 27-11-2009
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
hola amigos,

Les cuento que ya encontré la solución, en el siguiente hilo de otro foro:

http://stackoverflow.com/questions/2...in-delphi-2009

La respuesta es primero convertir la cadena en AnsiString y luego si hacer el llamado a PAnsiChar, asi:

Código:
s := PAnsiChar(AnsiString('Ejecutable.exe '+strParametros_l);
De este modo si retorna el Path completo y no solo la primera letra...

Espero que les sirva..!!!

un saludo,
Responder Con Cita
  #3  
Antiguo 27-11-2009
SyncReuter SyncReuter is offline
Miembro
 
Registrado: ene 2007
Posts: 26
Poder: 0
SyncReuter Va por buen camino
Hola, Esta cuestion me tiene loco, tengo un problema algo similiar, intente la solución que sale en el otro foro que tu indicas que la cuestion no funciona. Explico mi problema.

Tengo una variable string (FAppFileName) dentro de un componente la cual contiene la ruta completa mas el ejecutable, especificamente asi:

D:\Proyectos\Delphi\Cap\CapMain\AppNew.exe

ahora bien, el problema que tengo es que WinEXEC NO me ejecuta el archivo (AppNew.EXE) ahora bien si el mismo archivo lo pongo en la raiz del disco (D:\AppNew.EXE') y se lo asigno en forma absoluta a la variable FAppFileName:

WinExec(PAnsiChar(FAppFileName), SW_SHOWNORMAL);

SIIII ABREEEE LA aplicación, pero con ruta completa no hay manera que funcione. ahhh y lo olvidada me pasa lo mismo con Shellexecute, ¿Alguna idea?

¿Porque m... será?

Saludos
Responder Con Cita
  #4  
Antiguo 27-11-2009
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Debes entender que char, string y pstring y pchar son ALIAS al tipo string especifico de compilador. Antes de D2009 eso era ANSi y esde 2009 es UNICODE.

Entiende que el API de Windows es NATIVO EN UNICODE y tiene tambien alias y versiones en ANSI y UNICODE.

Asi, hay una version de la llamada al API de windows que empieza o termina en "A" y una que termina en "W". La que termina en W es nativo unicode y no tienes que hacer las conversiones.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 27-11-2009
SyncReuter SyncReuter is offline
Miembro
 
Registrado: ene 2007
Posts: 26
Poder: 0
SyncReuter Va por buen camino
ok Mamcx, entiendo lo que quieres decir, pero en mi caso en particular cual es el problema? Utilizo D2005 Pro UPD3!!! y los parametros que paso a la función son los correctos?

function WinExec(lpCmdLine: LPCSTR; uCmdShow: UINT): UINT; stdcall; // LPCSTR = PAnsiChar;

Código Delphi [-]
procedure TPrcWaitFormProgress.ExtractWaitForm(Sender: TObject);
var
  F: string;
begin
  F:=PathLocal + 'AppWFP.EXE'; // No funciona
  //ShowMessage(F); // me devuelve D:\Proyectos\Delphi\WSam\WSamManager\AppWFP.EXE
  //F:='C:\AppWFP.EXE'; // Asi funciona OK
  WinExec(PAnsiChar(F), SW_SHOW);
end;

Iluminame por favor, dime que estoy haciendo MAL!!!!

mmm lo olvidaba...ambas rutas el archivo existe

gracias por tu tiempo, Saludos
Responder Con Cita
  #6  
Antiguo 27-11-2009
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
Amigo SyncReuter, tu dices que ya probaste, pero intenta hacer un showmessage a las instrucciones:

ShowMessage(PAnsiChar(p));
ShowMessage(PAnsiChar(PAnsiString(p)));

Hazlo para ambos PATH:

D:\Proyectos\Delphi\WSam\WSamManager\AppWFP.EXE
D:\AppWFP.EXE

Ahora, ¿de que tipo es tu variable FAppFileName?

Un saludo,
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
PansiChar a string jorgegetafe Varios 6 24-12-2007 17:32:52
Problema con WinExec. Drahcir Varios 5 15-06-2007 08:28:57
WinExec karlita_cb Varios 3 18-05-2004 20:52:21
convertir de 'TCaption' para usar su valor en 'PAnsiChar' jbgpina OOP 5 03-03-2004 14:06:45
winexec en w2000 ogorut API de Windows 2 23-06-2003 18:41:58


La franja horaria es GMT +2. Ahora son las 22:47:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi