Considérations sur CPI-C pour Windows

Cette rubrique récapitule les informations à garder à l’esprit lorsque vous développez des programmes basés sur des systèmes d’exploitation Windows.

Notification d’achèvement asynchrone à l’aide de la publication de messages
Lorsqu’une opération asynchrone est terminée, la fenêtre d’applications hwndNotify reçoit le message retourné par RegisterWindowMessage avec « WinAsyncCPIC » comme chaîne d’entrée. La valeur wParam contient les conversation_return_code de l’opération qui se termine. Ses valeurs dépendent de l’opération qui a été émise à l’origine. L’argument IParam contient le CM_PTR à l’conversation_ID spécifié dans l’appel de fonction d’origine.

Notification d’achèvement asynchrone à l’aide d’événements Win32®
Lorsqu’un verbe est émis sur une conversation non bloquante, il retourne CM_OPERATION_INCOMPLETE s’il doit se terminer de manière asynchrone. Si un événement a été inscrit dans la conversation, l’application peut appeler WaitForSingleObject ou WaitForMultipleObjects pour être informée de la fin du verbe. WinCPICExtractEvent permet à une application CPI-C (Common Programming Interface for Communications) de déterminer ce handle d’événement. Une fois le verbe terminé, l’application doit appeler Wait_For_Conversationpour déterminer le code de retour du verbe asynchrone. La fonction Cancel_Conversationpeut être appelée pour annuler une opération et la conversation elle-même.

Il incombe à l’application de réinitialiser l’événement, comme c’est le cas avec d’autres API.

Si aucun événement n’a été inscrit, le verbe asynchrone se termine comme il le fait actuellement, c’est-à-dire en publiant un message dans la fenêtre que l’application a inscrite auprès de la bibliothèque CPI-C.

Ordre des octets
Par défaut, l’ordre d’octets Intel est utilisé. Pour les environnements inline, la définition de NON_INTEL_BYTE_ORDER effectue tout le basculement requis pour les constantes. Les paramètres d’entrée nonconstants dans les blocs de contrôle de verbes (VB) (par exemple, les longueurs et les pointeurs) sont toujours au format natif.

Événements
Pour recevoir des données de manière asynchrone, un handle d’événement est passé dans le champ sémaphore du VCB. Cet événement doit être à l’état non signé lorsqu’il est passé à CPI-C, et le handle doit avoir EVENT_MODIFY_STATE accès à l’événement.

Nom de la bibliothèque
Le nom de la DLL Win32® est WINCPIC32.DLL.

Plusieurs threads
Un programme de transaction (TP) peut avoir plusieurs threads qui émettent des verbes. Windows CPI-C prend des dispositions pour les processus Windows multithread. Un processus contient un ou plusieurs threads d’exécution. Toutes les références aux threads font référence à des threads réels dans un environnement Windows multithread.

Emballage
Pour des raisons de performances, les magnétoscopes ne sont pas emballés. Par conséquent, les DWORD se trouvent sur les limites DWORD, les WORD sur les WORD et les BYTE sur les BYTE. Les CVA doivent être accessibles à l’aide des structures fournies.

Liaison au moment de l’exécution
Pour qu’un TP soit lié dynamiquement à CPI-C au moment de l’exécution, le TP doit émettre :

  • LoadLibrary pour charger dynamiquement WINCPIC.DLL ou WINCPIC32.DLL, les bibliothèques pour WINCPIC.

  • GetProcAddress pour spécifier WINCPIC comme point d’entrée souhaité pour la bibliothèque de liens dynamiques (DLL).

  • FreeLibrary lorsque la bibliothèque CPI-C n’est plus nécessaire.

    Conversations simultanées
    Un programme peut participer simultanément à 64 conversations par processus.

    Fin des applications
    Dans les systèmes d’exploitation Windows, CPI-C ne peut pas dire quand une application se termine. Par conséquent, si une application doit se fermer (par exemple, elle reçoit un message WM_CLOSE à la suite d’un alt+F4 d’un utilisateur), l’application doit appeler WinCPICCleanup.

    Cédant à d’autres composants
    Lors du traitement du CPI-C et des verbes de service communs (CSV), il peut être nécessaire que le code de la bibliothèque soit transmis pour permettre à un autre composant, tel que SnaBase, de recevoir des messages et de les transmettre à l’application. Pour ce faire, utilisez les extensions Windows WinCPICSetBlockingHook et WinCPICUnhookBlockingHook.

    WinCPICSetBlockingHook permet à une implémentation Windows CPI-C de bloquer les appels de fonction CPI-C au moyen d’une nouvelle fonction. Pour appeler WinCPICSetBlockingHook :

FARPROC WINAPI WinCPICSetBlockingHook (FARPROC 1pBlockFunc)  

WinCPICUnhookBlockingHook supprime tout crochet de blocage précédent qui a été installé et réinstalle le mécanisme de blocage par défaut. Pour appeler WinCPICUnhookBlockingHook :

BOOL WINAPI WinCPICUnhookBlockingHook (void)