Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   .NET (https://www.clubdelphi.com/foros/forumdisplay.php?f=17)
-   -   Alguien que me ayude a transformar este fuente CSharp en una DLL (https://www.clubdelphi.com/foros/showthread.php?t=81850)

Blade_Is_One 26-12-2012 14:48:32

Alguien que me ayude a transformar este fuente CSharp en una DLL
 
Alguien qu eme ayude a trasnsformar este fuente de CSharp en una dll, ya que se me a echo un lio homologarla en delphi, asi si la logro transformar en dll compilando en CSharp la puedo llamar desde delphi.

se los agradeceria mucho a los que sean expertos en CSharp.

gracias de antemano..

Código PHP:

public static class VoiceCode
{
    public static 
string Compute(string GTINstring lotDateTimepackDate)
    {
        
ushort crc =  Crc16.ComputeChecksum(Encoding.ASCII.GetBytes(string.Format("{0}{1}{2}",  GTINlotpackDate.HasValue packDate.Value.ToString("yyMMdd") :
        
string.Empty))); return string.Format("{0:0000}"crc 10000);
    }
}


public static class 
Crc16 #region static members
    
private const ushort polynomial 0xA001; private static ushort[] table = new ushort[256]; static Crc16()
    {
        
ushort valueushort temp;
        for (
ushort i 0table.Length; ++i) {
            
value 0;
            
temp i; for (byte j 08; ++j) {
            if (
!= ((value temp) & 0x0001)) {
                
value = (ushort)((value >> 1) ^ polynomial);
            }     else {
                          
value >>= 1; } temp >>= 1;
                       }
            
table[i] = value;
        }
    } 
#endregion

    
public static ushort ComputeChecksum(byte[] bytes) { ushort crc 0;
         for (
int i 0bytes.Length; ++i) {
             
byte index = (byte)(crc bytes[i]);
             
crc = (ushort)((crc >> 8) ^ table[index]);
         } return 
crc;
    }



mamcx 26-12-2012 17:27:48

Para volverlo una DLL es solo cuestion de configurar el proyecto que genere un ensamblado de .NET. Tu problema va a ser como llamar esa DLL desde delphi, que es codigo nativo. Es posible, pero una vuelta larga para un codigo tan corto. Ademas no tiene nada que dependa si o si de correr en .NET y me parece que portarlo es mejor.

Cuando te enfrentes a estas cosas, lo que debes hacer es concentrarte en que problema tienes, no en el codigo concreto. Que es lo que hace? Como se llama el algoritmo usado? y entonces buscas una implementacion en Delphi que logre lo mismo.

Hay algo con .NET util y es que se puede desesamblar un codigo en .NET y verlo en multiples lenguajes, usando http://stackoverflow.com/questions/5...ler-decompiler y viendo como implementa en varios lenguajes..

-----
Por otro lado, el codigo se ve relativamente trivial. Una manera de ir interpretando es usando la ayuda para buscar la descripcion de las clases, luego haciendo paso a paso con el debugger e ir anotando mental o por escrito lo que va pasando. Para tan pocas lineas, no deberia tomarte mas de 1 hora resolverlo. Hay algo en concreto que te tenga pegado?

Blade_Is_One 26-12-2012 20:04:43

Gracias por la pronta respuesta, el problema que tengo es que necesito usar este algoritmo que me entregaron en Csharp y lo debo implementar en un sistema echo en delphi yo manejo bien delphi el problema me a dado que no e podido homologar este script completo a delphi hay sentencias que no entiendo mucho, lo converti a visual basic .NET para ejecutarlo y ver como funciona pero se cae , por lo mismo se me habia ocurrido compilarlo en en el lenguaje que biene pero transformandolo en DLL pero por lo que me comentas seria lo mismo que generar un DLL de visualBasic que solo corre en visualbasic, alguna ayuda que me des para homologar este script a Delphi. te lo agradeceria mucho.

Cita:

Empezado por mamcx (Mensaje 452471)
Para volverlo una DLL es solo cuestion de configurar el proyecto que genere un ensamblado de .NET. Tu problema va a ser como llamar esa DLL desde delphi, que es codigo nativo. Es posible, pero una vuelta larga para un codigo tan corto. Ademas no tiene nada que dependa si o si de correr en .NET y me parece que portarlo es mejor.

Cuando te enfrentes a estas cosas, lo que debes hacer es concentrarte en que problema tienes, no en el codigo concreto. Que es lo que hace? Como se llama el algoritmo usado? y entonces buscas una implementacion en Delphi que logre lo mismo.

Hay algo con .NET util y es que se puede desesamblar un codigo en .NET y verlo en multiples lenguajes, usando ---- -- - -- y viendo como implementa en varios lenguajes..

-----
Por otro lado, el codigo se ve relativamente trivial. Una manera de ir interpretando es usando la ayuda para buscar la descripcion de las clases, luego haciendo paso a paso con el debugger e ir anotando mental o por escrito lo que va pasando. Para tan pocas lineas, no deberia tomarte mas de 1 hora resolverlo. Hay algo en concreto que te tenga pegado?


nlsgarcia 02-01-2013 20:13:52

Blade_Is_One,

Cita:

Empezado por Blade_Is_One
El problema que tengo es que necesito usar este algoritmo que me entregaron en C# y lo debo implementar en un sistema hecho en Delphi

Cita:

Empezado por mamcx
Cuando te enfrentes a estas cosas, lo que debes hacer es concentrarte en que problema tienes, no en el codigo concreto. Que es lo que hace? Como se llama el algoritmo usado? y entonces buscas una implementacion en Delphi que logre lo mismo.

No soy experto en C# pero según entiendo el algoritmo realiza : El Cálculo del CRC16 de un String en base al Polinomio Generador $A001.

Revisa este código:
Código Delphi [-]
Library CRC;

uses
   SysUtils, Classes, Dialogs, StrUtils, Math;

{$R *.res}

function Crc16(Buffer : String; Polynom, Initial : Cardinal) : Cardinal;
var
   i,j : Integer;

begin
   Result := Initial;
   for i := 1 to Length(Buffer) do
   begin
      Result := Result xor ord(buffer[i]);
      for j := 0 to 7 do
      begin
         if (Result and $0001) <> 0 then
            Result := (Result shr 1) xor Polynom
         else
            Result := Result shr 1;
      end;
   end;
end;

function ComputeChecksum(Buffer : PChar) : Cardinal; stdcall;
var
   i : Cardinal;
   CrcTable : Array[0..255] of Cardinal;

begin

   for i := 0 to 255 do
      CrcTable[i] := Crc16(chr(i), $A001, 0);

   Result := 0;

   for i := 1 to Length(Buffer) do
     Result := (Result shr 8) xor CrcTable[(ord(Buffer[i]) xor Result) and $ff];

end;

exports
   ComputeChecksum;

end.
El código anterior Calcula el CRC16 de un String en base al Polinomio Generador $A001 por medio de la función exportada ComputeChecksum de la DLL CRC.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  function ComputeChecksum(Buffer : PChar) : Cardinal; StdCall; external 'CRC.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(IntToStr(ComputeChecksum(PChar(Edit1.Text))));
end;

end.
El código anterior utiliza la DLL CRC para el cálculo del CRC16 de un String.

Revisa estos Links:
Cita:

CRC calculations
http://www.miscel.dk/MiscEl/CRCcalculations.html

Tutorial: Cyclic Redundancy Check (CRC) Computation
https://marcel.wanda.ch/Tutorial/CRC/
Quizás esta solución se pueda adaptar a tu proyecto.

Espero sea útil :)

Nelson.


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

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