Estoy creando una librería la cual el código es parecido a este:
Código Delphi
[-]
library Project1;
uses
SysUtils,
Classes,
Dialogs;
{$R *.res}
Type
TModo = (B64);
Function ESum(Datos: String; Value: Word; Modo: TModo): String; stdcall;
begin
case Modo of
B64: Result := 'uses b64';
end;
end;
exports
ESum name 'Do64';
begin
end.
Este se compila bien y para la cual e creado una unit de importación la cual uso en el proyecto:
Código Delphi
[-]
unit Usescrypt;
interface
type
TModo = (B64);
const
ades = 'Project1.dll';
Type
TEncpt = function(Datos: String; Value: Word; Modo: TModo): String; stdcall;
function Base64(value : string) : string;
implementation
uses
Windows, Dialogs, SysUtils;
var
hencrypt : THandle;
_B64 : TEncpt;
function Base64(value : string) : string;
begin
If Assigned(_B64) then
Result := _B64(value,0,B64)
else
Result := 'No se pudo cargar la funcion';
end;
procedure comprueva;
begin
hencrypt := LoadLibrary(PChar(ades));
if hencrypt = 0 then
ShowMessage('no se pudo cargar la dll project1.dll')
else
@_B64 := GetProcAddress(hencrypt,'Do64');
end;
Initialization
comprueva;
Finalization
FreeLibrary(hencrypt);
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses Usescrypt;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := Base64(Label1.Caption);
end;
end.
Hasta aquí todo funciona buen pero una vez el programa esta en tiempo de ejecución y después de llamar a la función exportada y que esta devuelve el resultado produce un error antes de finalizar el bloque de código del procedimiento, dicho error lo adjunto.
Les pido me expliquen por que sucede esto, pues e intentado de todo pero no e logrado solucionar el problema. Gracias de antemano por la ayuda…