|
|
|
|
|
- Presentación
- Implementación
- 1. Incluidos los archivos de la interfaz C de WINDEV
- 2. Incluyendo las declaraciones HFSQL
- Declaración e inicialización
- 1. Declarar el contexto HFSQL y los búferes de trabajo de cada archivo:
- Ejecutar códigos WINDEV desde el lenguaje externo
- 1. Código de inicialización del proyecto WINDEV
- 2. Llamar a un código WLanguage
- 3. Obtener los eventos desencadenados en las ventanas WINDEV
- Finalización de la aplicación
Lenguaje externo: Programación en C
Vamos a llamar a los elementos desarrollados en WINDEV (proyecto, ventanas, análisis, etc.) desde el lenguaje C. Este sistema se basa en la utilización de las funciones declaradas en los archivos .h, .c y .cpp de WINDEV. El código WLanguage utilizado del lenguaje externo será compilado y ejecutado dinámicamente durante su llamada. Este modo se muestra en: - el proyecto VC60.dsp (formato Visual C++ 6), disponible en el subdirectorio "External Languages\ES\C" del directorio de instalación de WINDEV.
- el proyecto BC5.0.IDE (formato Borland C 5), disponible en el subdirectorio "External Languages\ES\C" del directorio de instalación de WINDEV.
1. Incluidos los archivos de la interfaz C de WINDEV Si utiliza una base de datos en su aplicación, el primer paso consiste en generar su análisis. En la descripción de este análisis, especifique el lenguaje de programación utilizado, así como el directorio que contendrá los archivos fuente. A través de la generación, se genera un esqueleto de programa en el lenguaje externo seleccionado (C por ejemplo). Esta operación también creará el archivo .h (véase más abajo) necesario para utilizar sus archivos de datos. Los siguientes archivos deben incluirse en un proyecto C para poder llamar a la interfaz C de WINDEV en este segundo método: Las dos líneas siguientes deben encontrarse en el código del archivo .c principal de su proyecto C: # include "WDExtern.h" // WINDEV language and objects # include "HFContext.h" // HFSQL database Estas líneas permiten recuperar las declaraciones mínimas necesarias para utilizar la interfaz externa. Observará que los archivos .h que describen la estructura de los archivos serán generados automáticamente por WINDEV al generar el análisis. 2. Incluyendo las declaraciones HFSQL Debe añadirse una inclusión (#include) para cada archivo de datos declarado en el análisis del proyecto WINDEV. Las declaraciones de los archivos de datos se incluyen en el archivo cuya extensión es.h (este archivo sustituye al.wdr creado con la versión anterior de WINDEV). Por ejemplo, en el proyecto Vc60.dsp (proporcionado con WINDEV en el directorio "ExternalLanguages"), se utiliza la siguiente línea para gestionar los archivos City y State: #include "WD External language.h" Declaración e inicialización 1. Declarar el contexto HFSQL y los búferes de trabajo de cada archivo: Si la aplicación debe gestionar archivos de datos, debe declararse un contexto de trabajo HFSQL, así como un búfer para cada archivo de datos. Estas declaraciones se realizan en el proyecto Vc60.dsp a través de las siguientes líneas: CHFContext gclHF; // Manage the HFSQL context StCITY gstCity; // HF buffer of City file StSTATE gstState; // HF buffer of State file 2. Inicializar las DLL de WINDEV El primer paso antes de utilizar los elementos desarrollados en WINDEV es cargar las DLL WINDEV en memoria e inicializarlas. Estas operaciones se realizan llamando a nWDInit, al principio de la secuencia de comandos WinMain de la siguiente manera: if (nWDInit(FALSE)!=WDERROR_OK) ... // error case handling 3. Inicializar HFSQL Si su aplicación está llamando a una base de datos, el acceso a HFSQL debe prepararse ahora. La siguiente prueba sirve para comprobar si esta inicialización se realiza correctamente: IHFContext * pIHF; if (!((nWDGetHFContext((void**)&pIHF)==WDERROR_OK) && (gclHF.bInit(pIHF)))) { // error case handling } 4. Cargar la biblioteca WINDEV (WDL) La librería WINDEV (extensión .WDL) contiene todos los elementos del proyecto (ventanas, informes, clases, consultas, análisis, etc.). Por lo tanto, debe cargarse en memoria para que sus componentes puedan ser llamados. La operación de carga se realiza mediante nWDOpenWDL de la siguiente manera: if (nWDOpenWDL(szWDL)!=WDERROR_OK) { // Library not found } 5. Abrir el análisis del proyecto y asociar los búferes a los archivos de datos La apertura del análisis permite llamar a los archivos de datos. Una vez abierto este análisis con HOpenAnalysisbasta con asociar las memorias intermedias de trabajo a los archivos descritos en este análisis: // Open the analysis (WDD contained in the WDL) if (!gclHF.HOpenAnalysis(szAnalysis,szPassword)) { // Error opening the analysis } // Buffer <-> file association gclHF.bAssociate("city",&gstCity,sizeof(gstCity)); gclHF.bAssociate("state",&gstState,sizeof(gstState)); Ejecutar códigos WINDEV desde el lenguaje externo 1. Código de inicialización del proyecto WINDEV Este código se utiliza para iniciar el proyecto WINDEV declarando las variables globales por ejemplo. Se ejecuta desde el lenguaje externo mediante nWDInitProject. Por ejemplo: if (nWDInitProject("")==WDERROR_INIT) { // Error initializing the project } 2. Llamar a un código WLanguage Todas las funciones de WLanguage se pueden llamar desde el lenguaje externo. El comportamiento de estas funciones de WLanguage, así como los valores devueltos, son idénticos tanto si se las llama como si no: - de WINDEV o
- desde la interfaz del lenguaje externo
Para conocer los parámetros y los valores de retorno de una función WLanguage, consulte la ayuda en línea o la documentación sobre WLanguage. Puede utilizar nWDExecute para llamar a un procedimiento WLanguage desde la interfaz externa. Por ejemplo: nWDExecute("OPEN(\"menu.wdw\")"); // Open the WINDEV window Dado que el parámetro esperado por nWDExecute es una cadena de caracteres C que contiene el código WLanguage a ejecutar, debe respetar la sintaxis de las cadenas C (los caracteres '\' deben ser dobles, las comillas deben ir precedidas del carácter de control '\', etc.). Esto le permite formatear esta cadena con caracteres de control como %s, %l ... como para la función printf de C. Además, en cuanto al WLanguage codificado en WINDEV, esta cadena no distingue entre mayúsculas y minúsculas (caracteres en mayúsculas/minúsculas). Por lo tanto, el comando "Info" también se puede escribir como "INFO". 3. Obtener los eventos desencadenados en las ventanas WINDEV La entrada en las ventanas WINDEV requiere recuperar los eventos desencadenadores en estas ventanas. Para recuperar los eventos del usuario (clic en un menú, en un botón, ...), debes implementar un sistema basado en una función 'callback' en tu programa C. Esta función será llamada automáticamente por su ventana WINDEV para cada acción del usuario. Para averiguar el tipo de acción realizada por el usuario, tiene la posibilidad de utilizar una variable de cadena de caracteres (en WLanguage) denominada WDKey'. Esta variable se utilizará en el código WLanguage para indicar al programa C qué botón se ha pulsado, por ejemplo. Esta cadena no tiene límite de tamaño y puede contener las sentencias detalladas que se recuperarán de su código C. Ejemplo: Código C // Open the first application window // Define the procedure that manages the WINDEV window nWDSetCallbackNext(CallBackMenu,0); // Open the WINDEV window nWDExecute("OPEN(\"menu.wdw\")"); [...] C procedure used as callback for the window: void CallBackMenu(DWORD dwUserParam,LPCTSTR pszCodeAction) { // pszCodeAction contains the sequence of shortcuts // that are used to select the menu choice if( strcmp(pszCodeAction,"Exit application")==0 ) nWDExecute("CLOSE()"); // Exit Código de "Archivo .. Salida" de la ventana "Menú" de WINDEV (WLanguage): nWDSetCallbackNext permite definir el procedimiento asociado a la siguiente ventana que se abrirá. La llamada a nWDExecute para abrir esta ventana establece el vínculo entre la ventana "Menú" y el callback "CallBackMenu". Cuando el usuario hace clic en "Archivo..Salir", WDKey será devuelto en el parámetro "pszCodeAction" al callback "CallBackMenu" que puede ser probado en el código C para realizar la siguiente acción. Nota WDKey al ser una cadena de caracteres, su contenido puede ser una descripción detallada de la acción a realizar. Por ejemplo, "Cerrar la aplicación". Finalización de la aplicación Para finalizar el uso de la interfaz externa, basta con llamar a WDTerm que no espera ningún parámetro. Por ejemplo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|