Explicit use of a DLL in a COBOL/C application

The following example shows explicit use of a DLL in a COBOL/C application.
  CBL  NODYNAM
        IDENTIFICATION DIVISION.
        PROGRAM-ID. 'COBOL1'.
        ENVIRONMENT DIVISION.
        CONFIGURATION SECTION.
        INPUT-OUTPUT SECTION.
        FILE-CONTROL.
        DATA DIVISION.
        FILE SECTION.
        WORKING-STORAGE SECTION.
        01 DLL-INFO.
            03 DLL-LOADMOD-NAME PIC X(12).
            03 DLL-PROGRAM-NAME PIC X(160).
            03 DLL-PROGRAM-HANDLE POINTER.
        77 DLL-RC               PIC S9(9) BINARY.
        77 DLL-PROGRAM-PTR      PROCEDURE-POINTER.

        77 DLL-STATUS           PIC X(1) VALUE 'N'.
            88 DLL-LOADED       VALUE 'Y'.
            88 DLL-NOT-LOADED   VALUE 'N'.

        PROCEDURE DIVISION.

            IF DLL-NOT-LOADED
            THEN
       *      Move the names in. They must be null terminated.
              MOVE Z'OOC05R' TO DLL-LOADMOD-NAME
              MOVE Z'ooc05r' TO DLL-PROGRAM-NAME

       *      Call the C routine to load the DLL and to get the
       *      function descriptor address.
              CALL 'A1CCDLGT' USING BY REFERENCE DLL-INFO
                                  BY REFERENCE DLL-RC
              IF DLL-RC = 0
              THEN
                SET DLL-LOADED TO TRUE
              ELSE
                DISPLAY 'A1CCLDGT failed with rc = '
                  DLL-RC
                MOVE 16 TO RETURN-CODE
                STOP RUN
              END-IF
            END-IF

       *    Move the function pointer to a procedure pointer
       *    so that we can use the call statement to call the
       *    program in the DLL.
            SET DLL-PROGRAM-PTR TO DLL-PROGRAM-HANDLE

       *    Call the program in the DLL.
            CALL DLL-PROGRAM-PTR

            GOBACK.
#include <stdio.h>
#include <dll.h>
#pragma linkage (A1CCDLGT,COBOL)

 typedef struct dll_lm {
   char         dll_loadmod_name[12];
   char         dll_func_name[160];
   void         (*fptr) (void); /* function pointer */
   } dll_lm;

 void A1CCDLGT (dll_lm *dll, int *rc)
 {
   dllhandle *handle;
   void (*fptr1)(void);
   *rc = 0;

   /* Load the DLL                                 */
   handle = dllload(dll->dll_loadmod_name);
   if (handle == NULL) {
      perror("A1CCDLGT failed on call to load DLL.\n");
      *rc = 1;
      return;
   }

   /* Get the address of the function              */
   fptr1 = (void (*)(void))
           dllqueryfn(handle,dll->dll_func_name);
   if (fptr1 == NULL) {
      perror("A1CCDLGT failed on retrieving function.\n");
      *rc = 2;
      return;
   }
   /* Return the function pointer                  */
   dll->fptr = fptr1;
   return;
 }