Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2008
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 0
kotai Va por buen camino
Perdón por tardar tanto en contestar, pero antes de la respuesta 5 ya lo tenía solucionado con lo de Position=0, pero cambié el email del foro porque tenía uno viejo y no me llegaban los avisos de respuesta y hasta hoy no me ha llegado el email de reactivación y por eso no podía escribir.

Mirando ejemplos de uso de stream vi lo de position=0 y al ponerlo todo funcionó a la perfeccción.

He enviado imágenes de otro tamaño a ver que pasaba y también lo coge perfectamente.

Muchas gracias a los dos por la ayuda.

Por cierto si queréis ver el juego es: www.miniracingonline.com y la función la quería para que al entrar a una partida si no tienes alguno de los coches de los otros jugadores se te envíe por el online.

Saludos.
Responder Con Cita
  #2  
Antiguo 14-01-2008
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 0
kotai Va por buen camino
Hola de nuevo.

Como comenté las funciones van perfectas y ya puedo envíar las imágenes online.

La gente ha empezado a probar el juego y de momento, un jugador japonés que tiene windows 2000 service pack 4 con Internet explore 6 actualizado le da un error al arrancar el juego que dice que no encuentra la función (no recuerdo cual de las dos que usa el código) en la librería cryt32.dll y se cierra el juego. Le he pasado mi librería del windows vista para que la ponga en la carpeta del juego, pero sigue dando el mismo error, por lo visto intenta cargarla desde Winnt\system32 y no desde la carpeta del juego. También le propuse que hiciera una copia de su DLL y pusiera la mía en system32, pero no es plan que toda la gente que tenga Win2000 o inferior tengan que machacar librerías del windows, de todas formas no le deja sobreescribirla, por lo que ya no quise insistir en que entrara en modo a prueba de fallos.
Lo que me gustaría saber es que parche o update oficial de microsoft hay que pasar al Windows 2000 con SP4 para que actualice esa DLL, y ponerlo como requisitos del juego.
¿ Alguien lo sabe ?

Otra opción es poner una condición en el compilador {$IFDEF ....} {$ENDIF} donde se definen esas funciones y luego se llaman, pero la condición debería ser si la librería contiene esas dos funciones, y eso no se como hacerlo. Podría poner que solo funcione con windowsxp y vista, pero prefiero que le funcione a la mayor gente posible.
¿ Alguna idea de hacerlo, u otra solución mejor ?

Gracias.
Responder Con Cita
  #3  
Antiguo 14-01-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Aquí el compañero marceloalegre afirma que instalando las librerías nuevas funciona bien:
http://www.clubdelphi.com/foros/show...8&postcount=14

Pero si no quieres depender del sistema operativo, ni tener que instalar nada, puedes buscar en internet alguna librería para codificar en base64. Seguro que encuentras un montón, ya que este tipo de codificación es ampliamente utilizada.
Responder Con Cita
  #4  
Antiguo 15-01-2008
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 0
kotai Va por buen camino
Hola de nuevo.

Pues todas las funciones que he encontrado son para pasar de String a String.

Al final he decidido hacerlo por condición en el compilador {$IFDEF ....} {$ENDIF} y que solo funcione con WinXP, Win2003 o Win Vista pero no se como detectar eso en tiempo de compilación.

¿ Que debería poner en el {$IFDEF ....} para que solo se compile cuando sea un WinXP o superior ?

Gracias.
Responder Con Cita
  #5  
Antiguo 15-01-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Una solución puede ser comprobar la existencias de las funciones antes de utilizarlas, para eso vamos a cargarlas de forma dinámica en vez de vincularlas a nuestro programa de forma estática, y si no las encontramos lanzamos una excepción que deberás de manejar en tu programa utilizando un bloque try ... except.

La cosa queda mas o menos así:
Código Delphi [-]
unit base64;

interface

uses Windows, SysUtils, Classes;

function BinToStr(Binary: PByte; Len: Cardinal): String;
procedure StrToStream(Str: String; Stream: TStream);

implementation

const
  CRYPT_STRING_BASE64HEADER = 0;
  CRYPT_STRING_BASE64 = 1;
  CRYPT_STRING_BINARY = 2;
  CRYPT_STRING_BASE64REQUESTHEADER = 3;
  CRYPT_STRING_HEX = 4;
  CRYPT_STRING_HEXASCII = 5;
  CRYPT_STRING_BASE64X509CRLHEADER = 9;
  CRYPT_STRING_HEXADDR = 10;
  CRYPT_STRING_HEXASCIIADDR = 11;
  CRYPT_STRING_HEXRAW = 12;
  CRYPT_STRING_NOCRLF = $40000000;
  CRYPT_STRING_NOCR = $80000000; 

function BinToStr(Binary: PByte; Len: Cardinal): String;
var
  Dll: HModule;
  Count: DWORD;
  CryptBinaryToString: function (pbBinary: PByte; cbBinary: DWORD; dwFlags: DWORD;
    pszString: PChar; var pcchString: DWORD): BOOL; stdcall;
begin
  Dll:= LoadLibrary('Crypt32.dll');
  if Dll <> 0 then
  try
    @CryptBinaryToString:= GetProcAddress(Dll,'CryptBinaryToStringA');
    if @CryptBinaryToString <> nil then
    begin
      Count:= 0;
      if CryptBinaryToString(Binary,Len,12,nil,Count) then
      begin
        SetLength(Result,Count);
        if not CryptBinaryToString(Binary,Len,12,PChar(Result),
          Count) then
          Result:= EmptyStr;
      end;
    end else
      raise Exception.Create('No encuentro CryptBinaryToStringA');
  finally
    FreeLibrary(Dll);
  end else
    raise Exception.Create('No encuentro Crypt32.dll');
end;

procedure StrToStream(Str: String; Stream: TStream);
var
  Dll: HModule;
  Buffer: PByte;
  Count: DWORD;
  CryptStringToBinary: function (pszString: PChar; cchString: DWORD; dwFlags: DWORD;
    pbBinary: PByte; var pcbBinary: DWORD; pdwSkip: PDWORD;
    pdwFlags: PDWORD): BOOL; stdcall;
begin
  Dll:= LoadLibrary('Crypt32.dll');
  if Dll <> 0 then
  try
    @CryptStringToBinary:= GetProcAddress(Dll,'CryptStringToBinaryA');
    if @CryptStringToBinary <> nil then
    begin
      Count:= 0;
      if CryptStringToBinary(PChar(Str),Length(Str),CRYPT_STRING_BASE64,nil,Count,
        nil,nil) then
      begin
        GetMem(Buffer,Count);
        try
          if CryptStringToBinary(PChar(Str),Length(Str),CRYPT_STRING_BASE64,Buffer,
            Count,nil,nil) then
            Stream.WriteBuffer(Buffer^,Count);
        finally
          FreeMem(Buffer);
        end;
      end;
    end else
      raise Exception.Create('No encuentro CryptStringToBinaryA');
  finally
    FreeLibrary(Dll);
  end else
    raise Exception.Create('No encuentro Crypt32.dll');
end;

end.

Y cuando la uses utiliza algo como esto:
Código Delphi [-]
try
  BinToStr( ...
except
  // Si llegamos hasta aqui es que las funciones no existen
end;

¿Que te parece? es solo una improvisación pero puede servir.
Responder Con Cita
  #6  
Antiguo 16-01-2008
Avatar de kotai
kotai kotai is offline
Miembro
 
Registrado: mar 2004
Ubicación: Gandia
Posts: 31
Poder: 0
kotai Va por buen camino
Muchas gracias, va perfecto.

Pues no me quedan cosas que aprender de delphi....

Saludos.
Responder Con Cita
  #7  
Antiguo 16-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cita:
Empezado por kotai Ver Mensaje
Pues no me quedan cosas que aprender de delphi....

Quisiera estar en tu situación... a mi me falta tanto por aprender...
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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
stringGrid y bitmap cacu OOP 2 24-10-2007 18:11:03
Bitmap javikanin Gráficos 1 22-11-2004 13:32:15
Imagen a Bitmap bustio .NET 1 08-11-2004 14:29:19
Descargar bitmap... craven Gráficos 1 13-09-2003 13:27:22
propiedad bitmap ccampoy OOP 1 29-06-2003 22:16:17


La franja horaria es GMT +2. Ahora son las 21:52:34.


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
Copyright 1996-2007 Club Delphi