Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-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: 19.504
Poder: 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 ermendalenda Ver Mensaje
Te dejo un ejecutable para que lo uses

En otro de los hilos tiene disponible lo mismo, pero en DLL (y el ejemplo de llamada), por si te puede servir.
https://www.clubdelphi.com/foros/sho...&postcount=607
__________________
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.
Responder Con Cita
  #2  
Antiguo 23-09-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
En otro de los hilos tiene disponible lo mismo, pero en DLL (y el ejemplo de llamada), por si te puede servir.
https://www.clubdelphi.com/foros/sho...&postcount=607
Gracias, esta bieen saberlo y que haya variedad.
Responder Con Cita
  #3  
Antiguo 23-09-2021
Ramon88 Ramon88 is offline
Miembro
 
Registrado: ago 2021
Posts: 157
Poder: 6
Ramon88 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
En otro de los hilos tiene disponible lo mismo, pero en DLL (y el ejemplo de llamada), por si te puede servir.
https://www.clubdelphi.com/foros/sho...&postcount=607

No puedo usar la DLL.
Error:
Asegurese de que tiene acceso al archivo y de que es un ensamblado o componente COM válido.
Responder Con Cita
  #4  
Antiguo 23-09-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Cita:
Empezado por Ramon88 Ver Mensaje
No puedo usar la DLL.
Error:
Asegurese de que tiene acceso al archivo y de que es un ensamblado o componente COM válido.
Mira si tienes una carpeta en \Windows\syswow64 y registra la ahí
Si y tuviera más capacidad para subirlo te subiria el instalador de la dll

Última edición por ermendalenda fecha: 23-09-2021 a las 17:54:16.
Responder Con Cita
  #5  
Antiguo 23-09-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Aqui tienes el instalador de la dll
https://www.filemail.com/d/wheiqnfrdwkmvgk
Responder Con Cita
  #6  
Antiguo 23-09-2021
Ramon88 Ramon88 is offline
Miembro
 
Registrado: ago 2021
Posts: 157
Poder: 6
Ramon88 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Aqui tienes el instalador de la dll
https://www.filemail.com/d/wheiqnfrdwkmvgk

Estas en todo! si vienes por Valencia estas invitado a una buena paella! jeje
Responder Con Cita
  #7  
Antiguo 23-09-2021
Ramon88 Ramon88 is offline
Miembro
 
Registrado: ago 2021
Posts: 157
Poder: 6
Ramon88 Va por buen camino
Termino de encontrar una función en .Net que si no me equivoco funciona bien.
Código:
    Function CRC_8(ByVal Txt As String) As Byte
        Dim Poly() As Byte = {1, 0, 0, 0, 0, 0, 1, 1, 1}
        Dim MessageBits As New List(Of Byte)
        Dim MsgBinString As String = ""
        'Compute the message binary
        For Each C As Char In Txt
            Dim S As String = Convert.ToString(Asc(C), 2)
            If S.Length < 8 Then S = New String("0"c, 8 - S.Length) & S

            MsgBinString &= S
        Next
        For Each C As Char In MsgBinString
            If C = "0"c Then MessageBits.Add(0) Else MessageBits.Add(1)
        Next
        'add 8 bits set to zero
        MessageBits.AddRange(New Byte() {0, 0, 0, 0, 0, 0, 0, 0})
        'compute CRC
        While MessageBits.Count > 8
            If MessageBits(0) = 0 Then
                MessageBits.RemoveAt(0)
                Continue While
            End If
            For x = 0 To 8 '<--9 bits
                MessageBits(x) = MessageBits(x) Xor Poly(x)
            Next
        End While
        'put the result in byte format and return
        Dim Result As Byte = 0
        For x = 0 To 7
            Result = Result Or (MessageBits(7 - x) << x)
        Next
        Return Result
    End Function
Responder Con Cita
  #8  
Antiguo 23-09-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Si te funciona perfecto. Pruébalo y dale.
Aunque no sé, me da la sensación de que le falta la tabla crc8 y el polynomio no me cuadra. No me hagas caso por que yo la función no la entiendo ni me he puesto a entenderla
Responder Con Cita
  #9  
Antiguo 24-09-2021
unomasmas unomasmas is offline
Miembro
 
Registrado: dic 2019
Posts: 194
Poder: 7
unomasmas Va por buen camino
Cita:
Empezado por Ramon88 Ver Mensaje
Termino de encontrar una función en .Net que si no me equivoco funciona bien.
Código:
    Function CRC_8(ByVal Txt As String) As Byte
        Dim Poly() As Byte = {1, 0, 0, 0, 0, 0, 1, 1, 1}
        Dim MessageBits As New List(Of Byte)
        Dim MsgBinString As String = ""
        'Compute the message binary
        For Each C As Char In Txt
            Dim S As String = Convert.ToString(Asc(C), 2)
            If S.Length < 8 Then S = New String("0"c, 8 - S.Length) & S

            MsgBinString &= S
        Next
        For Each C As Char In MsgBinString
            If C = "0"c Then MessageBits.Add(0) Else MessageBits.Add(1)
        Next
        'add 8 bits set to zero
        MessageBits.AddRange(New Byte() {0, 0, 0, 0, 0, 0, 0, 0})
        'compute CRC
        While MessageBits.Count > 8
            If MessageBits(0) = 0 Then
                MessageBits.RemoveAt(0)
                Continue While
            End If
            For x = 0 To 8 '<--9 bits
                MessageBits(x) = MessageBits(x) Xor Poly(x)
            Next
        End While
        'put the result in byte format and return
        Dim Result As Byte = 0
        For x = 0 To 7
            Result = Result Or (MessageBits(7 - x) << x)
        Next
        Return Result
    End Function



Yo uso esta clase que adapté de una versión PHP publicada en este foro (creo):
Código:
public static class Crc8{
     //private static const String UTF_8 = "UTF-8";
    // CRC-8,
    // Poly = x^8 + x^2 + x^1 + x^0
    // Init = 0
    // RefIn = false
    // RefOut = false
    // XorOut = 0
    private static readonly byte[] _crc8Table = new byte[] {
        (byte) 0x00, (byte) 0x07, (byte) 0x0E, (byte) 0x09, (byte) 0x1C, (byte) 0x1B, (byte) 0x12, (byte) 0x15,
        (byte) 0x38, (byte) 0x3F, (byte) 0x36, (byte) 0x31, (byte) 0x24, (byte) 0x23, (byte) 0x2A, (byte) 0x2D,
        (byte) 0x70, (byte) 0x77, (byte) 0x7E, (byte) 0x79, (byte) 0x6C, (byte) 0x6B, (byte) 0x62, (byte) 0x65,
        (byte) 0x48, (byte) 0x4F, (byte) 0x46, (byte) 0x41, (byte) 0x54, (byte) 0x53, (byte) 0x5A, (byte) 0x5D,
        (byte) 0xE0, (byte) 0xE7, (byte) 0xEE, (byte) 0xE9, (byte) 0xFC, (byte) 0xFB, (byte) 0xF2, (byte) 0xF5,
        (byte) 0xD8, (byte) 0xDF, (byte) 0xD6, (byte) 0xD1, (byte) 0xC4, (byte) 0xC3, (byte) 0xCA, (byte) 0xCD,
        (byte) 0x90, (byte) 0x97, (byte) 0x9E, (byte) 0x99, (byte) 0x8C, (byte) 0x8B, (byte) 0x82, (byte) 0x85,
        (byte) 0xA8, (byte) 0xAF, (byte) 0xA6, (byte) 0xA1, (byte) 0xB4, (byte) 0xB3, (byte) 0xBA, (byte) 0xBD,
        (byte) 0xC7, (byte) 0xC0, (byte) 0xC9, (byte) 0xCE, (byte) 0xDB, (byte) 0xDC, (byte) 0xD5, (byte) 0xD2,
        (byte) 0xFF, (byte) 0xF8, (byte) 0xF1, (byte) 0xF6, (byte) 0xE3, (byte) 0xE4, (byte) 0xED, (byte) 0xEA,
        (byte) 0xB7, (byte) 0xB0, (byte) 0xB9, (byte) 0xBE, (byte) 0xAB, (byte) 0xAC, (byte) 0xA5, (byte) 0xA2,
        (byte) 0x8F, (byte) 0x88, (byte) 0x81, (byte) 0x86, (byte) 0x93, (byte) 0x94, (byte) 0x9D, (byte) 0x9A,
        (byte) 0x27, (byte) 0x20, (byte) 0x29, (byte) 0x2E, (byte) 0x3B, (byte) 0x3C, (byte) 0x35, (byte) 0x32,
        (byte) 0x1F, (byte) 0x18, (byte) 0x11, (byte) 0x16, (byte) 0x03, (byte) 0x04, (byte) 0x0D, (byte) 0x0A,
        (byte) 0x57, (byte) 0x50, (byte) 0x59, (byte) 0x5E, (byte) 0x4B, (byte) 0x4C, (byte) 0x45, (byte) 0x42,
        (byte) 0x6F, (byte) 0x68, (byte) 0x61, (byte) 0x66, (byte) 0x73, (byte) 0x74, (byte) 0x7D, (byte) 0x7A,
        (byte) 0x89, (byte) 0x8E, (byte) 0x87, (byte) 0x80, (byte) 0x95, (byte) 0x92, (byte) 0x9B, (byte) 0x9C,
        (byte) 0xB1, (byte) 0xB6, (byte) 0xBF, (byte) 0xB8, (byte) 0xAD, (byte) 0xAA, (byte) 0xA3, (byte) 0xA4,
        (byte) 0xF9, (byte) 0xFE, (byte) 0xF7, (byte) 0xF0, (byte) 0xE5, (byte) 0xE2, (byte) 0xEB, (byte) 0xEC,
        (byte) 0xC1, (byte) 0xC6, (byte) 0xCF, (byte) 0xC8, (byte) 0xDD, (byte) 0xDA, (byte) 0xD3, (byte) 0xD4,
        (byte) 0x69, (byte) 0x6E, (byte) 0x67, (byte) 0x60, (byte) 0x75, (byte) 0x72, (byte) 0x7B, (byte) 0x7C,
        (byte) 0x51, (byte) 0x56, (byte) 0x5F, (byte) 0x58, (byte) 0x4D, (byte) 0x4A, (byte) 0x43, (byte) 0x44,
        (byte) 0x19, (byte) 0x1E, (byte) 0x17, (byte) 0x10, (byte) 0x05, (byte) 0x02, (byte) 0x0B, (byte) 0x0C,
        (byte) 0x21, (byte) 0x26, (byte) 0x2F, (byte) 0x28, (byte) 0x3D, (byte) 0x3A, (byte) 0x33, (byte) 0x34,
        (byte) 0x4E, (byte) 0x49, (byte) 0x40, (byte) 0x47, (byte) 0x52, (byte) 0x55, (byte) 0x5C, (byte) 0x5B,
        (byte) 0x76, (byte) 0x71, (byte) 0x78, (byte) 0x7F, (byte) 0x6A, (byte) 0x6D, (byte) 0x64, (byte) 0x63,
        (byte) 0x3E, (byte) 0x39, (byte) 0x30, (byte) 0x37, (byte) 0x22, (byte) 0x25, (byte) 0x2C, (byte) 0x2B,
        (byte) 0x06, (byte) 0x01, (byte) 0x08, (byte) 0x0F, (byte) 0x1A, (byte) 0x1D, (byte) 0x14, (byte) 0x13,
        (byte) 0xAE, (byte) 0xA9, (byte) 0xA0, (byte) 0xA7, (byte) 0xB2, (byte) 0xB5, (byte) 0xBC, (byte) 0xBB,
        (byte) 0x96, (byte) 0x91, (byte) 0x98, (byte) 0x9F, (byte) 0x8A, (byte) 0x8D, (byte) 0x84, (byte) 0x83,
        (byte) 0xDE, (byte) 0xD9, (byte) 0xD0, (byte) 0xD7, (byte) 0xC2, (byte) 0xC5, (byte) 0xCC, (byte) 0xCB,
        (byte) 0xE6, (byte) 0xE1, (byte) 0xE8, (byte) 0xEF, (byte) 0xFA, (byte) 0xFD, (byte) 0xF4, (byte) 0xF3 };

    /**
    * Calculate the CRC value with data from input string.
    * @param input input string
    * @return The calculated CRC value. Left padding with zeros.
    * // --NO: @throws UnsupportedEncodingException //
    */
    public static string GetCrc8(string input) {
        try
        {
            byte[] data = System.Text.Encoding.UTF8.GetBytes(input);
            int len = data.Length;
            byte crc = 0;
            for (int i = 0; i < len; i++)
                crc = _crc8Table[(crc ^ data[i]) & 0xff];
            long a = (crc & 0xFFL);
            return a.ToString("D3");
        }
        catch (System.Exception ex)
        {
            throw new System.Exception(ex.Message);
        }
    }
}
Responder Con Cita
  #10  
Antiguo 23-09-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Cita:
Empezado por Ramon88 Ver Mensaje
Estas en todo! si vienes por Valencia estas invitado a una buena paella! jeje
Buff que recuerdos arroz a la banda y fideua a la parte hacia mi padre, que era de Alicante de La. Vila
Responder Con Cita
  #11  
Antiguo 23-09-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: 19.504
Poder: 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 Ramon88 Ver Mensaje
No puedo usar la DLL.
Error:
Asegurese de que tiene acceso al archivo y de que es un ensamblado o componente COM válido.

Pues he vuelto a probar lo que hay en el ZIP y me funciona.
Tienes la DLL, el EXE que la llama y el código fuente.


Puedes probar a hacer un proyecto nuevo con la llamada. Es sencillo:


Código Delphi [-]
program testDLL;

{$APPTYPE CONSOLE}

{$R *.res}


uses
  ShareMem,
  Vcl.forms,
  WinAPI.Windows,
  VCL.Dialogs,
  System.SysUtils;

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.


¿Lo has probado con el EXE?
¿Estás llamando a la DLL desde otro lenguaje?
__________________
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.
Responder Con Cita
  #12  
Antiguo 23-09-2021
Ramon88 Ramon88 is offline
Miembro
 
Registrado: ago 2021
Posts: 157
Poder: 6
Ramon88 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Pues he vuelto a probar lo que hay en el ZIP y me funciona.
Tienes la DLL, el EXE que la llama y el código fuente.


Puedes probar a hacer un proyecto nuevo con la llamada. Es sencillo:


Código Delphi [-]program testDLL; {$APPTYPE CONSOLE} {$R *.res} uses ShareMem, Vcl.forms, WinAPI.Windows, VCL.Dialogs, System.SysUtils; 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.



¿Lo has probado con el EXE?
¿Estás llamando a la DLL desde otro lenguaje?

Si, lo estaba probando con .Net, agregando la dll como referencia para luego poder usarla, y ahí me daba el error.
Igual tengo que instalarlo como comenta ermendalenda. No obstannte voy a ver si funciona con la función que he encontrado, si no ya me lio a probar...


Gracias!
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
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice newtron Internet 3716 19-01-2026 21:01:34
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 10:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 17:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 10:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 10:21:14


La franja horaria es GMT +2. Ahora son las 03:55: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
Copyright 1996-2007 Club Delphi