Cita:
Empezado por Matorral
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;
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
public
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.
