Re: COBOL PIC format for a 64 bit unsigned int ("long long") ?



Hi Jan-Erik,

"Jan-Erik Söderholm" <jan-erik.soderholm@xxxxxxxxx> wrote in message
news:QgNAm.12209$U5.166948@xxxxxxxxxxxxxxxxxx
I am trying to call some COBOL code from a piece of C...

The call from C looks like this :

char cob_inart[16];
unsigned long long cob_insernr;
char cob_utben[16];
char cob_utordnr[16];
int rc;

rc = MES101(cob_inart, cob_insernr, cob_utben, cob_utordnr);

I get a ACCVIO when trying to use the "unsigned long long"
paramater on the COBOL side. I have probably not got the
right PIC clause to match the "unsigned long long", I guess.

Currently it looks like this (in MES101.COB) :

WORKING-STORAGE SECTION.
01 Answer PIC S9(9) COMP.

LINKAGE SECTION.
01 c_inart PIC X(16).
01 c_insernr pic 9(16) comp.
01 c_ben PIC X(16).
01 c_ordnr PIC X(16).

PROCEDURE DIVISION USING c_inart c_insernr c_ben c_ordnr
giving Answer.

As soon as I try to do anything with the "c_insernr"
paramater (such as DISPLAY or MOVE) the COBOL code ACCVIO's.

Does anyone have a clue what the PIC clause should look
like to match a "unsigned long long" ?

And yes, I have scanned the COBOL and C User Guides and
Ref Manuals, but didn't find anything clear on this point.




I'm guessing Pic 9(16) comp should cover it size wize. (If long long =
quadword)

What is the default passing mechanism for long longs? I'm guessing BY VALUE
rather than BY REFERENCE. Try telling C to send it by reference, or in your
COBOL have a pointer (probably ponter-64 but I've never used one) and say
SET MY_POINTER_64 TO REFERENCE C_INSERNR and then DISPLAY C_INSERNR and see
if it contains what you want.

Why you'd be using a quadword to store what is presumably an error number
(or using C at all for that matter) I don't know. But then you're a wrapper
man IIRC.

Cheers Richard Maher



.