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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2024
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.568
Poder: 26
egostar Va camino a la fama
Cita:
Empezado por Matorral Ver Mensaje
Gracias Egostar.



Pues si, lo que me preocupa ahora mismo es como actualizar las versiones de los clientes para mantenerles el pin de los usuarios.

Muchas gracias¡¡
Hola

En este caso lo que yo intentaría es crear una DLL con Delphi 7 que haga esa operación y regrese el dato esperado.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 29-05-2024
Avatar de Matorral
Matorral Matorral is offline
Miembro
 
Registrado: oct 2006
Ubicación: Ferrol-Galicia
Posts: 46
Poder: 0
Matorral Va por buen camino
Hola¡¡

Cita:
Empezado por egostar Ver Mensaje
Hola

En este caso lo que yo intentaría es crear una DLL con Delphi 7 que haga esa operación y regrese el dato esperado.

Saludos
Lo había intentado por medio de una dll cuando me lo dijo pgranados y el resultado obtenido con Delphi 11 era diferente al esperado (1414835712).

Ahora puse un showmessage en la dll para ver la diferencia digito a digito y ya no entiendo nada. Cuando ejecuto la funcion los dígitos pares (wClave1[i]) no tienen valor

Os paso la dll hecha en Delphi7...

Código Delphi [-]
library dllCodifica;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

function Codifica (v : string): int64; stdcall;
var wClave1: string;
    i:integer;
    j: int64;
begin

   j:=0;
   wclave1 := v;

   for i:=1 to Length(wClave1) do  begin
      j:=j*255+ord(wClave1[i]);

        showmessage(' Después de operacion '+chr(10)+chr(13)+
                 'i = '+inttostr(i)+chr(10)+chr(13)+
                 'j = '+inttostr(j)+chr(10)+chr(13)+
                 'wClave1[i] = '+wClave1[i]+chr(10)+chr(13)+
                 'ord(wClave1[i]) = '+inttostr(ord(wClave1[i]))+chr(10)+chr(13)+
                 'j:=j*255+ord(wClave1[i]) = '+inttostr(j*255+ord(wClave1[i]))+chr(10)+chr(13)+
                 'j:=j*7 = '+inttostr(j*7));
   end;

   j:=j*7;

   Result:=j;

end;

exports Codifica;

begin
end.

y este es la rutina en Delphi 12 que consume la dll...

Código Delphi [-]
unit CODIFICA;

interface

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

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

var
  Form1: TForm1;

var Lib : THandle;
    dllCodifica: function(v:String):int64; stdcall;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  label1.caption:=IntToStr(dllCodifica(edit1.Text));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

    Lib:=LoadLibrary('dllCodifica.dll');
    dllCodifica := GetProcAddress(Lib,'Codifica');

end;

end.

Desde Delphi 12, al introducir '1111' en el edit y luego al hacer click en el boton, muestra el resultado digito a digito, y en los digitos pares aparece un valor nulo en wClave1[i].

Desde Delphi 7 da el valor esperado.

No entiendo nada, se me escapa.


Gracias¡¡
__________________
Inieeeesssstademiviiiiidaaaaa.
Responder Con Cita
  #3  
Antiguo 29-05-2024
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.568
Poder: 26
egostar Va camino a la fama
Cita:
Empezado por Matorral Ver Mensaje
Hola¡¡
.....
Desde Delphi 12, al introducir '1111' en el edit y luego al hacer click en el boton, muestra el resultado digito a digito, y en los digitos pares aparece un valor nulo en wClave1[i].

Desde Delphi 7 da el valor esperado.

No entiendo nada, se me escapa.


Gracias¡¡
Bueno, es que el detalle es que no estás considerando Unicode.

Crea la DLL en Delphi 7 así


Código Delphi [-]
library DLLCodifica;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes;

{$R *.res}

function Codifica(v: WideString): integer; stdcall;
var
  wClave1: string;
  i,j: longint;
begin
  j := 0;
  wclave1 := v;
  for i := 1 to Length(wClave1) do
  j := j * 255 + ord(wClave1[i]);
  j := j * 7;
  Result := j;
end;

exports
  Codifica;
  
begin
end.

Y con Delphi 11 consumela así


Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

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

  dllCodifica = function(v: WideString): integer; stdcall;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: THandle;
  procInt: dllCodifica;
  Regreso: integer;
begin
  Regreso := 0;
  Handle := LoadLibrary( PChar(ExtractFilePath(ParamStr(0)) + 'DLLCodifica.dll') );
  if Handle <> 0 then
  begin
    @procInt := GetProcAddress(Handle, PChar('Codifica'));
    if @procInt <> nil then
    try
      Regreso := procInt('1111');
      ShowMessage(Regreso.ToString);
    except
      on E : Exception do
      ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
    end;
  end;
  FreeLibrary(Handle);
end;

end.

__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 29-05-2024
Avatar de Matorral
Matorral Matorral is offline
Miembro
 
Registrado: oct 2006
Ubicación: Ferrol-Galicia
Posts: 46
Poder: 0
Matorral Va por buen camino
Muchas gracias egostar¡¡¡¡

Que crack¡¡

Va perfecto.

Millón de gracias¡¡ (y una cervecita a mi salud¡¡)
__________________
Inieeeesssstademiviiiiidaaaaa.
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
Capturar imagenes con WebCam y Delphi 11 Alexandria trex2000 Gráficos 5 08-04-2024 08:45:21
SDK y jedi Delphi Alexandria rg8143454 Desarrollo en Delphi para Android 6 08-10-2023 15:46:23
Problema en Delphi Alexandria con Firebase Cloud Messaging elcharlie FireMonkey 0 02-02-2022 15:23:19
Como declarar una funcion en Delphi que devuelve la k-esima palabra de una cadena branncg Varios 3 12-06-2015 15:24:02
funcion en dll usada en vb6 se comporta diferente en delphi erickperez6 Varios 2 29-05-2013 18:37:53


La franja horaria es GMT +2. Ahora son las 16:22:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi