Ver Mensaje Individual
  #607  
Antiguo 13-05-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por tejano Ver Mensaje
yo creo que sí me serviría una DLL.
Podrías enviármela o decirme dónde puedo conseguirla?
Conseguirla, no lo se, se puede hacer.
En delphi es bastante sencillo.

Te adjunto la DLL con 2 funciones (con parámetros diferentes, para que uses el que te vaya mejor):

Código Delphi [-]
// utilizando un string
function crc8S(const AText:string):byte;
// utilizando un Puntero (AnsiChar)
function crc8P(const AText:PAnsiString):byte;


Usa el código que pubicó [keys] en este mismo foro.

Para usarlo, por ejemplo desde Delphi, basta con algo así:

Código Delphi [-]
type
  TfunctionCRC8S = function(const AText:string): byte;
  TfunctionCRC8P = function(const AText:PAnsiChar): byte;

var
  str, fName:String;
  b:byte;
  h:cardinal;
  fs:TfunctionCRC8S;
  fp:TfunctionCRC8P;
begin

  // Nombre
  fName := ExtractFilePath(Application.ExeName) + 'crc8.dll';
  // comprobamos si existe, si no existe ya no continuamos
  if not FileExists(fName) then
    raise Exception.Create('No se encuentra la DLL  en: ' + sLineBreak + fName);
  // Cargar la DLL
  h := LoadLibrary(PChar(fName));
  if (h < 32) then
    raise Exception.Create('No se ha podido cargar la DLL');

  // buscar los métodos dentro de la DLL
  fs := GetProcAddress(h, 'crc8S');
  fp := GetProcAddress(h, 'crc8P');
  // Los ha encontrado
  if Assigned(fs) and Assigned(fp) then begin

    WriteLn('Escribir cadena de entrada o vacío para salir: ');
    ReadLn(Str);
    while (Str <> string.empty) do begin

      // Probarlo con parámetro string
      b := fs(Str);
      WriteLn('Cadena de entrada: ' + str);
      writeLn('Salida (string): ' + string.Format('%.3d',[b]));
      writeLn('-------------------------------');

      // Parámetro AnsiChar
      b := fp(PAnsiChar(Str));
      WriteLn('Cadena de entrada: ' + str);
      writeLn('Salida (PAnsiChar): ' + string.Format('%.3d',[b]));
      writeLn('-------------------------------');
      writeln(' ');

      // vuelta a empezar...
      WriteLn('Escribir cadena de entrada o vacío para salir: ');
      readLn(Str);
    end;
  end;
end.


Te adjunto el proyecto de test de la DDL (incluye el compilado para que puedas usarla directamente).
Así puedes ver cómo son las llamadas.

El funcionamiento sería este; Lo he probado con las siguientes cadena que han ido saliendo en el foro:

NOTA: Si probáis las URL's anteriores, coged el link no el texto en pantalla porque vBulletin lo corta.

Y para comprobar, tal y como han dicho, la web que mejor funciona es esta:
https://toolslick.com/programming/ha...crc-calculator


Archivos Adjuntos
Tipo de Archivo: zip Llamada a DLL CRC8.zip (1,23 MB, 59 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 13-05-2021 a las 14:03:22.
Responder Con Cita