Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo: Compartir datos entre procesos mediante archivos asignados en memoria

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 188535
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Resumen
Aunque generalmente es la forma más sencilla y más eficaz de compartir datos entre dos procesos mediante tablas compartidas, es posible utilizar archivos asignados en memoria para realizar la misma tarea. En el siguiente ejemplo utiliza las funciones Win32 CreateFileMapping MapViewOfFile y UnmapViewOfFile para utilizar el archivo de paginación de Windows como un archivo asignado en memoria y pasar una cadena entre dos copias de Visual FoxPro.

Nota: Este ejemplo está pensado para su uso sólo en Windows NT y se ha escrito y probado con Windows NT 4.0.
Más información
  1. Iniciar una instancia de Visual FoxPro.
  2. Create and run a program containing the following code:
          DECLARE INTEGER CreateFileMapping IN kernel32.DLL INTEGER hFile, ;         INTEGER lpFileMappingAttributes, INTEGER flProtect, ;         INTEGER dwMaximumSizeHigh, INTEGER dwMaximumSizeLow, ;         STRING lpName      DECLARE INTEGER MapViewOfFile IN kernel32.DLL ;         INTEGER hFileMappingObject, INTEGER dwDesiredAccess, ;         INTEGER dwFileOffsetHigh, INTEGER dwFileOffsetLow, ;         INTEGER dwNumberofBytesToMap      DECLARE INTEGER GetLastError IN kernel32.DLL      DECLARE INTEGER lstrcpy IN kernel32.DLL ;         INTEGER lpString1, STRING @lpString2      DECLARE INTEGER UnmapViewOfFile IN kernel32.DLL ;         INTEGER lpBaseAddress      DECLARE INTEGER CloseHandle IN kernel32.DLL INTEGER hObject      #DEFINE page_writeread 4      #DEFINE page_readwrite 4      #DEFINE file_map_read 4      #DEFINE file_map_write 2      * FFFFFFFF (2^32) means: Use the Windows NT pagefile as the memory-      * mapped file.      * Otherwise, you could substitute a handle that you have created.      #DEFINE usepagefile 2^32      * Arbitrary name for the file mapping.      szename = "hello"      * This says: Create a file-mapping object from the pagefile,      * using a default security descriptor, giving Read/Write access      * to the committed region, with a maximum size of 4096 bytes,      * named szeName, and return the handle to this file-mapping      * object in variable 'handle'.      handle = createfilemapping(usepagefile, 0, page_readwrite, 0, ;         4096, szename)      IF handle = 0         WAIT WINDOW "CreateFileMapping failed - LastError: " ;            + LTRIM(STR(getlasterror()))         RETURN      ENDIF      * This says: Given the handle obtained above, give full access      * to the file-mapping object, starting at offset 0, and map the      * entire file into my process' address space.      addhandle = mapviewoffile(handle, file_map_write, 0, 0, 0)      IF handle = 0         WAIT WINDOW "MapViewOfFile failed - LastError: " ;            + LTRIM(STR(getlasterror()))         RETURN      ENDIF      * Now, the file can be treated just like a memory address.      * Use lstrcpy to copy the FoxPro string to addhandle, the      * starting address of the mapped view.      * The text you want to write to the shared memory-mapped      * file goes here.      stxt1 = "Hello world, I'm writing to a shared page file."      ret = lstrcpy(addhandle, @stxt1)      * When the message box appears, run the corresponding program      * to read the memory-mapped file in a second instance of FoxPro.      * Unmapping the file view and closing the handle removes the text      * from the file.      = MESSAGEBOX("Now switch to the other application")      * When we've finished with it, unmap the file-mapping object      * from our address space and release the handle.      =UnmapViewOfFile (addhandle)      =CloseHandle(handle)								
  3. When the message box containing the text "Now switch to the other application" appears, run a second instance of Visual FoxPro, create and run a program containing the following code:
          DECLARE INTEGER CreateFileMapping IN kernel32.DLL INTEGER hFile, ;         INTEGER lpFileMappingAttributes, INTEGER flProtect, ;         INTEGER dwMaximumSizeHigh, INTEGER dwMaximumSizeLow, ;         STRING lpName      DECLARE INTEGER MapViewOfFile IN kernel32.DLL ;         INTEGER hFileMappingObject, INTEGER dwDesiredAccess, ;         INTEGER dwFileOffsetHigh, INTEGER dwFileOffsetLow, ;         INTEGER dwNumberofBytesToMap      DECLARE INTEGER GetLastError IN kernel32.DLL      DECLARE INTEGER lstrcpy IN kernel32.DLL ;         STRING @lpString1, INTEGER lpString2      DECLARE INTEGER UnmapViewOfFile IN kernel32.DLL ;         INTEGER lpBaseAddress      DECLARE INTEGER CloseHandle IN kernel32.DLL INTEGER hObject      #DEFINE page_writeread 4      #DEFINE page_readwrite 4      #DEFINE file_map_read 4      #DEFINE file_map_write 2      * FFFFFFFF (2^ 32) means: Use the Windows NT pagefile as the memory-      * mapped file. Otherwise, you could substitute a handle that you      * have created.      #DEFINE usepagefile 2^32      #DEFINE maxbuffersize 254      * Arbitrary name for the file mapping.      szename = "hello"      * This says: Create a file-mapping object from the pagefile,      * using a default security descriptor, giving Read/Write access      * to the committed region, with a maximum size of 4096 bytes,      * named szeName, and return the handle to this file-mapping      * object in variable handle.      handle = createfilemapping(usepagefile, 0, page_readwrite, ;         0, 4096, szename)      IF handle = 0         WAIT WINDOW "CreateFileMapping failed - LastError: " ;            + LTRIM(STR(getlasterror()))         RETURN      ENDIF      * This says: Given the handle obtained above, give full      * access to the file-mapping object, starting at offset 0,      * and map the entire file into my process' address space.      addhandle = mapviewoffile(handle, file_map_write, 0, 0, 0)      IF handle = 0         WAIT WINDOW "MapViewOfFile failed - LastError: " ;            + LTRIM(STR(getlasterror()))         RETURN      ENDIF      * Now, the file can be treated just like a memory address.      * Use lstrcpy to copy the Foxpro string to the Foxpro      * string stxt2 from the starting address of the mapped view.      * Buffer to receive passed string.      stxt2 = SPACE(254)      ret = lstrcpy(@stxt2, addhandle)      =MESSAGEBOX ("String I read was: " + stxt2)      * When we've finished with it, unmap the file-mapping object      * from our address space and release the handle.      =UnmapViewOfFile(addhandle)      =CloseHandle (handle)								
  4. La segunda instancia de Visual FoxPro debe mostrar la cadena escrita en el archivo de paginación por la primera instancia. Para desasignar el archivo de paginación y libera todos los identificadores, presione Aceptar en los cuadros de mensaje en ambas instancias de Visual FoxPro.
El código de ejemplo presentado aquí es complejo. Respuestas a preguntas acerca de este ejemplo pueden requerir que ingenieros de soporte técnico de Microsoft dedique algún tiempo a sí mismos familiarice con el código.
Referencias
Ayuda del SDK de Win32; tema: "CreateFileMapping"; "MapViewOfFile"; "UnmapViewOfFile"

Para obtener más información sobre los usos de los archivos asignados en memoria:

"Avanzadas de Windows: Guía del desarrollador de la para la API de Win32 para Windows NT 3.5 y Windows 95," Jeffry Richter, capítulo 7, Microsoft Press
página archivo kbnokeyword de kbDSupport archivo asignado en memoria CreateFileMapping MapViewOfFile UnmapViewOfFile

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 188535 - Última revisión: 02/23/2014 05:24:15 - Revisión: 2.0

Microsoft Visual FoxPro 5.0 Standard Edition, Microsoft Visual FoxPro 5.0a

  • kbnosurvey kbarchive kbmt kbhowto KB188535 KbMtes
Comentarios