FoxPress – Octubre 2001

 

Cómo hacer una .FLL (guía para torpes)

http://www.fpress.com/

 

Por Luis Requesens                                                                                 copiaArchivos.zip
 

Fox desde la versión 2.0 tiene la posibilidad de hacer librerías PLB (entorno DOS) y FLL (entorno Windows). Estas librerías te permiten realizar operaciones de más bajo nivel que de otra forma no podrías. Te pongo una guía ‘paso a paso’ para poder hacer tu primera .FLL útil.

 

Usaremos Visual C++ 6.0

 

§         Copia los ficheros PRO_EXT.H  que lo tendrás dentro del directorio API de instalación de Fox en el directorio Include del directorio de instalación de VC++ .

 

§         Copia el difichero WinApims.lib que lo tendrás dentro del directorio API de Fox al directorio lib de Visual C++.

 

§         Lanza VC++ y pulsa en  File/New.

 

 

§         Selecciona dentro de la pestaña de proyectos la opción  Win32 Dynamic Link Library y dejala marcada.

 

§         En location pon el nombre del directorio donde vas a realizar tu primera .FLL. El directorio debe ya de existir. Por ejemplo: c:\CopiaArchivos.

 

§         En Project name escribe CopiaArchivos.

 

§         La opción de ‘Create new workspace’ se debe quedar como marcada por defecto.

 

§         Pulsa en Aceptar y se te abre otra ventana en el que te pregunta qué tipo de DLL quieres crear.

§         Deja marcada la opción de  an empty DLL project. Pulsa en Finalizar. Y dale OK a lo que te diga.

 

§         Escoje ahora File\new. Dentro de la pestaña de Files escoje C++ source file y pon en file name CopiaArchivos (la opción de Add to project debe estar marcada por defecto).

 

§         Escoje ahora Project\Settings y pulsa en la pestaña de C++ . Pon la opción de Category Code a generation.

 

§         La opción de Calling convention : _fastcall

 

§         La opción de Use runtime lib : Multithreaded DLL

 

§         Pulsa la pestaña de Link y pon delante de todos los Object/library modules :winapims.lib. El resto de las opciones déjalas como están.

 

§         Pulsa OK y cierra el Project/Settings.

Escribe el siguiente código dentro de CopiaArchivos.cpp.

 
#include < windows.h >
#include < stdio.h >
#include < pro_ext.h >
 
char FAR *NullTerminate(Value FAR *cVal)
{
    char *RetVal;
    if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))
    {
             _Error(182); // "Insuficiente Memoria"
    }
    
    ((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';
    RetVal = (char FAR *) _HandToPtr(cVal->ev_handle);
    return RetVal; 
}
 
 
void FAR FileOp(ParamBlk FAR *parm)
{
    SHFILEOPSTRUCT ShCopyInfo;
    ZeroMemory(&ShCopyInfo, sizeof (SHFILEOPSTRUCT));
 
    char FAR *source = NullTerminate(&parm->p[0].val);  
    char FAR *target = NullTerminate(&parm->p[1].val);
    
    ShCopyInfo.hwnd = GetActiveWindow();
    ShCopyInfo.pFrom=source;
    ShCopyInfo.pTo=target;
    ShCopyInfo.wFunc=FO_COPY;
    ShCopyInfo.fFlags=FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR;
 
    int success = SHFileOperation(&ShCopyInfo);
    _RetInt(success,10);
}
 
 
FoxInfo myFoxInfo[] =
{
    {"FileCopyX", (FPFI) FileOp, 2, "CC"},
};
extern "C" {
FoxTable _FoxTable =
{
    (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
} 

 

·         Pulsa F7 (tecla rápida para compilar)

 

·         Vete al directorio CopiaArchivo\Debug\ y cambia la extensión de CopiaArchivo.DLL a CopiaArchivo.fll

 

·                             En Fox escribe:
 
set library to C:\temp\filecopier\Debug\filecopier.fll
FileCopyX('c:\dir1\*.*','c:\dir2')

 

El directorio origen debe de existir. Esto te produce un sistema de copiar archivos con estilo an explorer (con animación y barra de progreso).

 

Ya ves que no es tan dificil. Lo que hay que saber es C++

 

 

 

FoxPress – Octubre de 2001

© 2001 FoxPress. All rights reserved