Ver Mensaje Individual
  #1  
Antiguo 18-04-2014
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Reputación: 0
kotai Va por buen camino
const char* de C a String de Delphi

Hola.

Estoy utilizando SDL2 en DelphiXE5 y tengo un problema en todas las funciones de SDL2 que devuelven una cadena, el valor que leo siempre son letras japonesas. Según la documentación de SDL2 todas las cadenas están codificadas en UTF8. De hecho las funciones SDL2 a las que yo les tengo que pasar cadenas los hago con: PChar(UTF8Encode(cadena)) y funciona perfectamente, pero cuando es SDL2 el que me devuelve la cadena no.

Os pongo un caso concreto: función SDL_GetHint
La documentación dice:
Código:
Syntax
const char* SDL_GetHint(const char* name)

Function Parameters
name : the hint to query;
 
Return Value
Returns the string value of a hint or NULL if the hint isn't set.
Y la implementación de la función en Delphi:
Código Delphi [-]
function SDL_GetHint( const name: PChar): PChar; cdecl; external SDL_LibName;

A la hora de usarla en mis juegos he probado varias formas, pero siempre me devuelve letras japonesas o interrogantes. Os pongo algunas de las llamadas que he hecho, en las 2 primeras me devuelve letras japonesas y en las otras 3 devuelve: ???t
Código Delphi [-]
var
   aux : string;
begin
     aux := SDL_GetHint(PChar(UTF8Encode(SDL_HINT_RENDER_SCALE_QUALITY)));
     aux := PChar(SDL_GetHint(PChar(UTF8Encode(SDL_HINT_RENDER_SCALE_QUALITY))));
     aux := UTF8Decode(SDL_GetHint(PChar(UTF8Encode(SDL_HINT_RENDER_SCALE_QUALITY))));
     aux := PChar(UTF8Decode(SDL_GetHint(PChar(UTF8Encode(SDL_HINT_RENDER_SCALE_QUALITY)))));
     aux := UTF8Decode(PChar(SDL_GetHint(PChar(UTF8Encode(SDL_HINT_RENDER_SCALE_QUALITY)))));
end;

¿ Alguna idea de como recuperar el valor real de la cadena ?
Como digo el pasar cadenas a las funciones de SDL2 con PChar(UTF8Encode(cadena)) funciona perfectamente, está comprobado en todas las funciones SDL2 a las que hay que pasar una cadena. El problema lo tengo cuando es SDL2 el que me devuelve las cadenas.

Gracias.
Responder Con Cita