Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error en Función de DLL (https://www.clubdelphi.com/foros/showthread.php?t=73181)

orlando9427 05-04-2011 23:37:17

Error en Función de DLL
 
Hola comunidad, tengo un problema =/
He estado creando DLLs para un proyecto personal, todo bien hasta ahí todas funcionales menos una que me debe de devolver un nombre, la DLL no me la devolvia por lo que decidi revisar la funcion mas de cerca y la agregue a un proyecto nuevo solo para revisarla, paso por paso todo perfecto, pero en la linea "Result := PChar(sTe);" me tira un error EAccessViolation y siempre es en esa linea, intente limpiar las variables incluso un Sleep pero nada. Casualmente sucede cuando cargo archivos relativamente grandes pues mi archivo de prueba es de 1KB y cuando lo quise probar con uno de 120KB sucede lo antes descrito, les dejo la función por si pase algo por alto.

Código Delphi [-]
function Scan32(sFile, sDir: PChar): PChar;
var sTe: String; //Alamacen de Nombre de Firma
    Source: String; //Base de Datos Des/En - Cryptada
    sDest: String; //Archivo a Escanear
    sFirma, sNombre : String; //Variables comparadoras sFirma(Codigo malicioso) sNombre(Nombre del codigo)
begin
     Source := fFileToString(sDir);
     sDest := fFileToString(sFile); 

     Source := fPMADecrypt(TrimLeft(Source), 'xxxxxx'); //Desencriptamos la DB
     while Pos('"', Source) > 0 do begin //Repetimos mientras haya firmas que comparar
           sNombre := ''; sTe := '';
           sFirma := LeftStr(Source,Pos('"',Source) - 1); //Obtenemos el codigo firmado
           Source := RightStr(Source, Length(Source) - Length(sFirma) - 1); //Lo quitamos de la DB
           if sFirma[1] = #$D then sFirma := RightStr(sFirma, Length(sFirma) - 2); //Si Existe CRLF lo quitamos
              sNombre := LeftStr(Source,Pos('"',Source) - 1); //Obtenemos el nombre de la firma

           if Pos(sFirma, sDest) > 0 then begin //Si el codigo esta dentro del archivo
              sTe := sNombre; //Almacenamos el nombre de la firma hasta que otra la sustituya
           end; //Ya sea por una nueva firma o tenga dos firmas el archivo
           Source := RightStr(Source, Length(Source) - Length(sNombre) - 1); Application.ProcessMessages; //Quitamos el Nombre de la DB
     end; //Cerramos el While
     Source := '';
     Result := PChar(sTe); //Regresamos el nombre de la Firma
end; //Terminamos la función

Espero su respuesta
Gracias de antemano


La franja horaria es GMT +2. Ahora son las 11:05:55.

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