PDA

Ver la Versión Completa : Problemas con carga y descarga de una dll


Fita
13-08-2018, 20:54:06
Hola a todos.
Tengo un error de Access Violation que no puedo resolver. El error solo ocurre cuando se carga la dll.
Estoy haciendo algo mal?

Desde ya muchas gracias
Codigo de muestra:

procedure cierraliquidacion(sender: tobject);
var cCodbar: string;
hMod: Thandle;
GenRapipago: function(nCodempresa: integer; nLegajo: integer; nNroFactura: integer; nVto1: currency; nVto2: currency; cFecJul_1: string; cFecJul_2: string): string; stdcall;
begin
if Liq000Agente.value <> 0 then // si el agente es > a 0 genera el codigo de barras y cargo la dll
begin
hMod := loadlibrary('fitasoft2.dll');
end;

if (Liq000Agente.Value = 1) or (Liq000Agente.Value = 3) then
begin
GenRapiPago := GetProcaddress(hMod, 'GenRapiPago'); // genera codigo de barras, llamo la funcion
end;

Tabla.Open;

// aca hago un do while generando el codigo de barras para cada registro
while not Res041.of do
begin
cCodbar := '';

if (Liq000Agente.value = 1) then
begin
cCodbar := GenRapiPago(IBLiq000NroEmpAgente.Value, Res041Codfam.Value, nroCompte, Res041Totrecibo.AsCurrency,
Res041Totrecibo2.AsCurrency, strFecJul_1, strFecJul_2);
end;

Tabla.Edit;
TablaCodbarra.value := cCodbar;
Tabla.post;
Res041.next;
end;

Tabla.close;
Res041.Close;

if Liq000Agente.Value > 0 then
begin
freeLibrary( hMod );
end;

Liq000.close;
showmessage('Proceso terminado');
// luego de dar ok al mensaje da el error Acces Violation, solo los que usan el codbar

end; // el debug me marca esta linea

Ñuño Martínez
14-08-2018, 12:21:47
Hay dos posibilidades:

Estás usando un recurso de dentro de la DLL fuera de ella, pudiendo haber una incompatibilidad dentro del marco de memoria (quizá el bloque está marcado como local y por eso no deja usarlo fuera de la DLL, si es que es posible hacer eso en Windows).
O quizá estás liberando un recurso (¿la propia DLL?) antes de tiempo, o intentando acceder a dicho recurso tras su destrucción.

En cualquier caso habrá que ver qué es exactamente lo que provoca la violación de acceso.

Fita
14-08-2018, 14:42:34
Gracias por tu respuesta Ñuño
Seguire investigando

Abrazo