Tema: Error en DLL
Ver Mensaje Individual
  #1  
Antiguo 28-07-2007
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Reputación: 18
MON___ Va por buen camino
Error en DLL

Tengo una DLL en SYSTEM32 y en ella la siguiente función:

{ Abre una ventana con un objeto TEDIT para un proceso de búsqueda }
function buscarValor(
var devuelto : string; {guarda la cadena de búsqueda}
caracteres : integer; {máximo de caracteres para el objeto TEDIT}
mayusculas : boolean {si sólo se admite la edición en mayúsculas}
):boolean; stdcall; export; {TRUE: si se ha aceptada y escrito texto en TEDI}

Ésta es la rutina escrita en la DLL

FBuscar := TFBuscar.create(nil);
try
with FBuscar do
begin
edit1.maxLength := caracteres;
if mayusculas then edit1.charCase := ecUpperCase else edit1.charCase := ecNormal;
result := showModal = mrok;
if result then devuelto := edit1.text;
end;
finally
FBuscar.free;
end;


En el FORM de la aplicación que hace la llamada:

type
TLlamarDLL = function (var s : string; x : integer; m : boolean) : boolean;
var
DLL : HWND;
LlamarDLL : TLLamarDLL;
s : string;
begin
DLL := loadLibray('MONLIB.DLL');
if DLL > 0 then
try
@LlamarDLL := getProcAddress(DLL, 'buscarValor');
if @LlamarDLL <> nil then
if llamarDLL(s, 50, True) then
edit1.text := s;
finally
FreeLibrary(DLL);
end;
end;

Pues bien. Si el resultado es FALSE (he pulsado en la ventana que se abre con la función el botón CANCELAR) no me da error. En cambio, si el resultado de la función es TRUE (he pulsado ACEPTAR y además he escrito texto) se me da el error: EAccessViolation

¿Dónde puede estar el error?
Responder Con Cita