Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2014
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 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
  #2  
Antiguo 18-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué es SDL2?
Responder Con Cita
  #3  
Antiguo 18-04-2014
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 0
kotai Va por buen camino
SDL2 son unas librerías para hacer juegos o programas multimedia multiplataforma: Windows, Linux, mac, ios, Android y unos cuantos sistemas más.

www.libsdl.org

De SDL había unos headers para Delphi/Pascal hechos por JEDI, pero no funcionaban desde los Delphi XE y tampoco para SDL2. Yo estoy acabando de hacer los de SDL2 para delphixe5/6 compatibles con win32, win64, mac y supongo que ios (no he probado por no tener licencia de desarrollador). Lo que me está costando mucho más es para Android porque ha de pasar por un java que aun no se como hacer. Cuando tenga los headers acabados los publicaré para que todo el mundo los pueda usar.

Puedes ver como funcionan en la última versión (1.14F) de mi juego www.miniracingonline.com las versiones anteriores usaban unDelphiX


Saludos
Responder Con Cita
  #4  
Antiguo 24-04-2014
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 0
kotai Va por buen camino
¿ Nadie tiene idea de como leer esos strings desde la dirección que devuelve sdl2.dll ?

Gracias
Responder Con Cita
  #5  
Antiguo 25-04-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Por lo que dices, el problema parece ser que las cadenas que devuelve SDL no están codificadas correctamente. ¿Seguro que es UTF-8? ¿Cuál es el orden (endianess) de los octetos, Microsoft o Motorola (bigendian/littlendian)? ¿La alineación es correcta?

De todas formas, en Pascal Game Development hay gente con más experiencia con SDL. Yo soy más de Allegro.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
char to string? Laurogriffin Varios 4 29-01-2012 22:07:18
Convertir char*, char[], string lmpadron C++ Builder 2 29-10-2010 09:08:45
Uso de Const con parámetros String marcoszorrilla Trucos 0 29-06-2006 22:51:31
(const Value: string) vs (Value: string) eliash OOP 10 14-12-2005 19:10:13
Pasar string a char Sayuri Varios 3 09-08-2005 16:35:29


La franja horaria es GMT +2. Ahora son las 18:02:17.


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