Quantcast
Channel:
Viewing all articles
Browse latest Browse all 43889

Forum Post: RE: CICS calling Cobol Native calling C++

$
0
0
Hi, David. The call convention is ok. I read about the DLL_CONVENTION to declare which C++ call convention is used. I tried to put this variable in run-time of properties project. Also in the code. But I couldn't produce difference between the methods. Look my example: CICS: Example of project of Tutorial CICS. I put two calls: TEMPLATE and ECOSHSM       IDENTIFICATION DIVISION.                                         06000000       PROGRAM-ID. ACCT00.                                              12000000      *      *      *  Copyright (C) Micro Focus 2013.      *  All rights reserved.      *      *  This sample code is supplied for demonstration purposes only      *  on an "as is" basis and "is for use at your own risk".      *      *       ENVIRONMENT DIVISION.                                            48000000       DATA DIVISION.       WORKING-STORAGE SECTION.         77  WS-ECOSHSM                    PIC X(008) VALUE 'ECOSHSM'.         77  WS-TEMPLATE                   PIC X(008) VALUE 'TEMPLATE'.         01  A222-REGISTRO.                                                  * INPUT           03   A222-LABEL                  PIC X(064).           03   A222-EXPOENTE               PIC 9(005).           03   A222-HASH                   PIC X(064).           03   A222-MODULO                 PIC X(512).      * OUTPUT           03   A222-RETORNO                PIC 9(002).           03   A222-MENSAGEM               PIC X(080).       LINKAGE SECTION.       01 DFHCOMMAREA.        03 AREA01                           PIC 9(002).        03 AREA02                           PIC X(080).       PROCEDURE DIVISION.                                              60000000       INITIAL-MAP.                                                     66000000           EXEC CICS SEND                     MAP('ACCTMNU')                     MAPSET('ACCTSET') FREEKB                           72000000                     ERASE MAPONLY           END-EXEC.                                                    79000000           CALL WS-TEMPLATE USING DFHEIBLK DFHCOMMAREA A222-REGISTRO.           CALL WS-ECOSHSM USING DFHEIBLK DFHCOMMAREA A222-REGISTRO.           EXEC CICS RETURN TRANSID('AC01') END-EXEC.           GOBACK.                                                      93000000 This a TEMPLATE code. It works.       IDENTIFICATION               DIVISION.       PROGRAM-ID.                  TEMPLATE.       ENVIRONMENT                  DIVISION.       CONFIGURATION                SECTION.       SPECIAL-NAMES.       CALL-CONVENTION 66 IS API32.       WORKING-STORAGE SECTION.       77 urlBuffer                 PIC X(100).       77 dwFlags                   PIC 9(9) COMP-5.       77 dwReserved                PIC 9(9) COMP-5.       77 dwResult                  PIC S9(9) COMP-5.       77 visResult                 PIC -------9.       PROCEDURE DIVISION.       MAIN-LOGIC.           STRING  " HTTP://WWW.ACUCORP.NO&quot ; DELIMITED BY SPACE                   LOW-VALUES      DELIMITED BY SIZE                   INTO            urlBuffer.           MOVE    1               TO dwFlags.           INITIALIZE              dwReserved                                   dwResult.           SET     ENVIRONMENT     "DLL-CONVENTION" TO "1".           CALL    "WININET.DLL"           CALL    "InternetCheckConnectionA" USING                   BY REFERENCE    urlBuffer                   BY VALUE        dwFlags                   BY VALUE        dwReserved                   GIVING          dwResult.           MOVE    dwResult        TO visResult.           CANCEL  "wininet.dll".           EXIT    PARAGRAPH. This code calls my dll. If I write it with cdecl call convention, it works. If I write with stdcall, doesn't work.      *$set ans85 mf defaultbyte"00" case       identification division.       program-id. ECOSHSM.       special-names.           call-convention 66 is API32.       data division.       working-storage section.       copy "Ecoscard.cpy".       01  ws-rc-code              pic 9(008) comp-5.       01  ws-DE55.        03 ws-Field55              pic x(512).        03 ws-LenField55           pic 9(004) comp-5.        03 ws-pCVNout              pic x(002).        03 filler                  pic x(001).        03 ws-pATCout              pic x(004).        03 filler                  pic x(001).        03 ws-pUNout               pic x(008).        03 filler                  pic x(001).        03 ws-pPANSEQout           pic 9(002).        03 filler                  pic x(001).        03 ws-pARQCout             pic x(016).        03 filler                  pic x(001).        03 ws-pKDV                 pic x(002).        03 filler                  pic x(001).       77  ws-label                pic x(064).       77  ws-pHandleSession       pic 9(008)  comp-5.       77  ws-SlotID               pic 9(004)  comp-5.       01  pointer-ECMCHPKC                USAGE PROCEDURE-POINTER.       linkage section.       copy dfheiblk.       01 DFHCOMMAREA.        03 AREA01                           PIC 9(002).        03 AREA02                           PIC X(080).         01  A222-REGISTRO.                                                  * INPUT           03   A222-LABEL                  PIC X(064).           03   A222-EXPOENTE               PIC 9(005).           03   A222-HASH                   PIC X(064).           03   A222-MODULO                 PIC X(512).      * OUTPUT           03   A222-RETORNO                PIC 9(002).           03   A222-MENSAGEM               PIC X(080).       procedure division using dfheiblk dfhcommarea a222-registro.      * procedure division.           set environment "dll-convention" to "1".      *      ***** Iniciar DLL      *           call "ECMCHPKC.dll".      *      ***** Iniciar campos      *           string "9F02060000000000009F03060000000000009F1A0200769505"                  "00000000005F2A0209869A031303049C01009F370401020304"                  "820258009F360200169F10120210A00013220200F5A8000000"                  "00000000FF9F3501209F2701809F260800A219B250E4D920"               delimited by size                 into ws-Field55      *         with pointer ws-LenField55           end-string.      *           move 198       to ws-LenField55.           call API32 GetTagsFromDE55 using                by reference ws-Field55                    by value     ws-LenField55                by reference ws-pCVNout                    by reference ws-pATCout                    by reference ws-pUNout                    by reference ws-pPANSEQout                by reference ws-pARQCout                  by reference ws-pKDV                      returning ws-rc-code           end-call.      *      ***** HSM Start      *           call API32 EcosCardInitHSM using                by reference                   z"C:\Program Files (x86)\LunaSA\cryptoki.dll"                by reference                   z"pr020425()"                returning ws-rc-code           end-call.      *      ***** HSM Open      *           move  1  to ws-SlotID.           call API32 EcosCardOpenSessionHSM using                by reference ws-pHandleSession                by value     ws-SlotID                returning ws-rc-code           end-call.      *      ***** HSM Close      *           move  1  to ws-SlotID.           call API32 EcosCardCloseSessionHSM using                by value ws-pHandleSession                returning ws-rc-code           end-call.      *      ***** HSM Finish      *           call API32 z"EcosCardFinalizeHSM"                returning ws-rc-code           end-call.       fim-pgm.           cancel "ECMCHPKC.dll".           goback. Regards, Marcelo.

Viewing all articles
Browse latest Browse all 43889

Trending Articles