Ver Mensaje Individual
  #1  
Antiguo 05-04-2011
orlando9427 orlando9427 is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 8
Reputación: 0
orlando9427 Va por buen camino
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
Responder Con Cita