Consideraciones de CPI-C para Windows

En este tema se resume la información que debe tener en cuenta al desarrollar programas basados en sistemas operativos Windows.

Notificación de finalización asincrónica mediante la publicación de mensajes
Cuando se completa una operación asincrónica, la ventana de aplicaciones hwndNotify recibe el mensaje devuelto por RegisterWindowMessage con "WinAsyncCPIC" como cadena de entrada. El valor wParam contiene el conversation_return_code de la operación que se está completando. Sus valores dependen de la operación que se emitió originalmente. El argumento IParam contiene el CM_PTR al conversation_ID especificado en la llamada de función original.

Notificación de finalización asincrónica mediante eventos Win32®
Cuando se emite un verbo en una conversación que no se bloquea, devuelve CM_OPERATION_INCOMPLETE si va a completarse de forma asincrónica. Si se ha registrado un evento con la conversación, la aplicación puede llamar a WaitForSingleObject o WaitForMultipleObjects para recibir una notificación de la finalización del verbo. WinCPICExtractEvent permite una aplicación de interfaz de programación común para comunicaciones (CPI-C) para determinar este identificador de eventos. Una vez completado el verbo, la aplicación debe llamar a Wait_For_Conversationpara determinar el código de retorno del verbo asincrónico. Se puede llamar a la función Cancel_Conversationpara cancelar una operación y la propia conversación.

Es responsabilidad de la aplicación restablecer el evento, como sucede con otras API.

Si no se ha registrado ningún evento, el verbo asincrónico se completa como lo hace en la actualidad, que está publicando un mensaje en la ventana que la aplicación se ha registrado con la biblioteca CPI-C.

Ordenación de bytes
De forma predeterminada, se usa la ordenación de bytes de Intel. Para entornos insertados, definir NON_INTEL_BYTE_ORDER hace todo el volteo necesario para constantes. Los parámetros de entrada no constantes en bloques de control de verbos (VCB) (por ejemplo, longitudes y punteros) siempre están en el formato nativo.

Eventos
Para recibir datos de forma asincrónica, se pasa un identificador de eventos en el campo semáforo del VCB. Este evento debe estar en el estado no asignado cuando se pasa a CPI-C y el identificador debe tener EVENT_MODIFY_STATE acceso al evento.

Nombre de la biblioteca
El nombre del archivo DLL de Win32® es WINCPIC32.DLL.

Varios subprocesos
Un programa de transacciones (TP) puede tener varios subprocesos que emiten verbos. Windows CPI-C aprovisiona procesos basados en Windows multiproceso. Un proceso contiene uno o varios subprocesos de ejecución. Todas las referencias a subprocesos hacen referencia a subprocesos reales en un entorno de Windows multiproceso.

Embalaje
Por motivos de rendimiento, los VCB no se empaquetan. Como resultado, los DWORD se encuentran en límites DWORD, WORDs en WORD y BYTEs en BYTEs. Se debe tener acceso a los VCB mediante las estructuras proporcionadas.

Vinculación en tiempo de ejecución
Para que un TP esté vinculado dinámicamente a CPI-C en tiempo de ejecución, el TP debe emitir:

  • LoadLibrary para cargar dinámicamente WINCPIC.DLL o WINCPIC32.DLL, las bibliotecas de WINCPIC.

  • GetProcAddress para especificar WINCPIC como punto de entrada deseado a la biblioteca de vínculos dinámicos (DLL).

  • FreeLibrary cuando la biblioteca CPI-C ya no es necesaria.

    Conversaciones simultáneas
    Un programa puede participar simultáneamente en hasta 64 conversaciones por proceso.

    Finalización de aplicaciones
    En los sistemas operativos Windows, CPI-C no puede indicar cuándo finaliza una aplicación. Por lo tanto, si una aplicación debe cerrarse (por ejemplo, recibe un mensaje de WM_CLOSE como resultado de alt+F4 de un usuario), la aplicación debe llamar a WinCPICCleanup.

    Rendimiento a otros componentes
    Al procesar verbos de CPI-C y Common Service (CSV), es posible que sea necesario que el código de biblioteca produzca para permitir que otro componente, como SnaBase, reciba mensajes y páselos a la aplicación. Esto se puede lograr mediante las extensiones de Windows WinCPICSetBlockingHook y WinCPICUnhookBlockingHook.

    WinCPICSetBlockingHook permite que una implementación de CPI-C de Windows bloquee las llamadas de función CPI-C mediante una nueva función. Para llamar a WinCPICSetBlockingHook:

FARPROC WINAPI WinCPICSetBlockingHook (FARPROC 1pBlockFunc)  

WinCPICUnhookBlockingHook quita cualquier enlace de bloqueo anterior que se haya instalado y vuelva a instalar el mecanismo de bloqueo predeterminado. Para llamar a WinCPICUnhookBlockingHook:

BOOL WINAPI WinCPICUnhookBlockingHook (void)