• Duda mover archivo a temp y hacerle loadlibrary

 #417372  por Pink
 25 Jun 2013, 02:05
Como dice orlando9427 verificas si existe. suponiendo que cambia el current directory al iniciar la aplicacion podrías obtener la ruta donde tienes la dll obteniendo el current directory (ovio si la copias a temp de una cuando inicia el progama)


no tengo el ide a la mano pero deberia funcionar asi
var
  dir : string;

dir := GetCurrentDir;
saludos
 #417398  por Metal_Kingdom
 25 Jun 2013, 06:17
A ver si me entero bien..

Tienes tu programa y tu dll en el mismo directorio, correcto?
Y quieres que al abrir el programa, compruebe la existencia de la dll en el directorio del proyecto, y si existe, copiarla a %temp%, y por último cargarla con LoadLibrary, cierto?

Primeramente deberías especificar la función a usar de la dll, de eso ya te encargas tú.

Lo principal que pides así lo puedes hacer, no te compliques la vida:
//uses windows, sysutils;

Function mEnviron(VName: string): string;
var Res: array [0..MAX_PATH] of Char;
begin
ExpandEnvironmentStrings(PChar('%' + VName + '%'), Res,
ExpandEnvironmentStrings(PChar('%' + VName + '%'), Nil, 0));
Result:= Res;
end;

var
  LibH: THandle;
  TempLib: string;
Const
DllName = 'midll.dll';
begin
  LibH:= 0;
  TempLib:= mEnviron('temp') + '\' + DllName;
  if fileexists(DllName) then
    if copyfile(DllName, PChar(TempLib), True) then
      LibH:= LoadLibrary(PChar(TempLib));
  if LibH <> 0 then
    begin
      {Aquí las acciones a realizar si
      la librería se ha cargado desde %temp% ...}
    end;
end;
Con esto que pusiste antes:

Edit1.Text := SetCurrentDirectory (Pchar(GetTempDir2));

Me mataste vivo compañero, No puedes asignar a edit1.text el resultado de tipo [ Debe registrarse para ver este enlace ] que devuelve la función [ Debe registrarse para ver este enlace ]

Si lo que quieres es mostrar en el edit el directorio actual, usa [ Debe registrarse para ver este enlace ]

Un saludo.