Hmm. After I read the chapter about pointer conversion my understanding is that it should have worked.
The service program is compiled to use teraspace and the ILE RPG program is enabled for teraspace by default. The procedure returned a pointer (8-byte teraspace) and my understanding of the docs are that it should have been converted to 16 byte (and I didn't get any error message here, so far so good). Now why is it giving me an error message when I pass the pointer back to the service program as a parameter? Should it also convert it back to an 8-byte pointer?
The compilers automatically insert pointer conversions to match pointer lengths.
Does this only work under 7.1? The machine I tried is running 6.1.
From: c400-l-bounces+mihael.schmidt=rossmann.de@xxxxxxxxxxxx [mailto:c400-l-bounces+mihael.schmidt=rossmann.de@xxxxxxxxxxxx] On Behalf Of Barbara Morris
Sent: Friday, June 04, 2010 9:24 PM
Subject: Re: [C400-L] pointers in different storage models
On 6/4/2010 5:44 AM, Schmidt, Mihael wrote:
Now I have just read that in 7.1 RPG modules can be compile with the
storage model *teraspace. Does that mean that the pointer in RPG will
also be 8 byte and that the calling to the procedure might work with
7.1 because it is the same storage model?
No, even with storage model *teraspace, RPG will still only support 16
You will have to use 16 byte pointers in the parameter interfaces
between C and RPG. The C modules can use 8 byte pointers internally.
Here is a page from the C/C++ manual about specifying 8 or 16 byte
pointers in prototypes:
Here is a page from ILE Concepts about pointer conversions: