![]() |
pasar contenido de pchar a string
hola a todos.
Despues de ejecutar un funcion y obeter un puntero pchar de un determinao array, tengo que pasar estos datos a un string para poder tratarlos. ¿alguien sabe como hacer ésto? muchas gracias. |
Prueba esto a ver si es lo que quieres.
Suerte. |
max?
ok, con esto paso los datos de mi variable:
datos: pchar; final :string; paso los datos de "datos" a final d eesta foram. ¿y el max seria el numero de caracters contenidos en el puntero datos? gracias |
Si, max es la cantidad de caracteres.
Suerte. |
Hombre, la forma normal es simplemente asignarlos y listo, hacer un bucle aunque valido (el del ejemplo habria que corregirlo ya que no se fija el tamaño del string asi que dara error) es un poco matar moscas a cañonazos ademas de mas lento.
Código:
var |
mejorando el ejemplo anterior, con eso te funcionara correctamente
|
Hacer un cast a PChar(datos) es una redundancia debido a que datos YA es de tipo PChar, luego le estamos diciendo al compilador algo que ya sabe (que interpreta la variable datos como de tipo PChar cuando ya es de ese tipo).
El resultado final del codigo compilado se haga el cast o no es identico, simplemente el codigo fuente ocupara un pelin mas. Saludos |
Mick prueba lo que dices desarrollando una DLL que tenga compatibilidad con "C", prueba luego hablamos
|
sudamericano,es ese mi problema
Hola,
Ese es mi problema, trabajo con una dll externa, en c+ y el tipo de datos del pchar es el que me da problemas en delphi al pasarlo o recogerlo en una variable y pasarlo a un string. ¿como podria solucionarlo? |
Creo que lo tengo:
Creo que esto funcionará. |
coletaun mandame tu dll a mi correo y te ayudo mandandote un ejemplo en delphi con fuentes para que puedas solucionar tu problema
|
STrPas es una funcion que existe solo por mantener compatibilidad hacia atras con programas antiguos y que estos no dejen de funcionar, pero borland no recomienda su uso, ya que podria ser eliminada en el futuro. La propia ayuda de delphi sobre la funcion StrPas dice:
"This function is provided for backwards compatiblity only. To convert a null terminated string to an AnsiString or native Delphi languag string, use a typecast or a assignment" Que viene a decir: Esta funcion existe solo por compatibilidad con programas antiguos. Para convertir una cadena terminada en nulo a un AnsiString o a un string nativo de delphi, use un typecast o una asignacion. Saludos PD: No importa que la funcion que devuelve el puntero a char este en una DDL igualmente no hace falta usar el typecast. Solo haria falta si lo que devuelve la funcion no fuese exactamente de tipo PChar sino de otro tipo compatible. |
sudamericano
Te mando la dll y la configuración de la dll para ver si es posible que me puedas echar una mano.
Muchas gracias. |
Mick
De todas formas lo que devuelve la función en c, está definido asi:
BOOL WINAPI captura_pantalla(HCLIENT hclient, char *pantalla, int *longitud, int tout); ¿que tipo de variable seria para capturar en delphi pantalla? Gracias |
En el caso en particular que mencionas no importa el tipo de la variable, la funcion funcionaria igual poniendo cualquier tipo al puntero:
Código:
char *pantalla;Código:
final:= pchar(datos); Las variables string de delphi no tienen ese problema debido a que al principio de los datos guardan un contador con el tamaño de la cadena, lo que permite que la cadena de caracteres o bytes pueda contener cualquier valor incluido el cero. En cambio los PChar conceptualmente son iguales que los char * equivalentes de C, y el caracter 0 se utiliza como fin de cadena y no puede formar parte de los propios datos. En ese caso hay que definir el tamaño del string primero y despues asignarlo con un bucle o mejor con una funcion que copie bloques de bytes ya que es mucho mas rapido. Por ejemplo: Código:
Código:
Código:
|
| La franja horaria es GMT +2. Ahora son las 08:44:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi