nat6979-Premature termination of a remote CALLNAT.

Hi
I have a NATURAL client like the following
DEFINE DATA LOCAL
1 #NAME (A2)
END-DEFINE
CALLNAT ‘INSERT’ #NAME
END

I use ENX and we generated our stub by C
When I run the NATURAL Program , I get 6979

This is my insert method in C
void ERX_CALL_DECLARATION INSERT (
char id[2+1]
)
{
id[0] = ‘s’;

return;
}

and the server side gives error :
11:07:34 WORKER(0ffc): 10050033 Could not resolve RPC call for SYSTEM/INSERT.

11:07:34 WORKER(0ffc): 10050044 ERXDynDispatch() failed.
11:07:34 WORKER(0ffc): 10010009 Invalid format buffer. Location of wrong Paramet
er is 1.


What is the possible reason ?

and when I change #name to A1 I get no errors !!!


Thanx

Hello,

The C wrapper offers for A type fields 2 different styles
- C style strings with null-termination
- Mainframe style strings without null-termination
You can control this at generation time of the stubs.

The C prototype you posted is for an A2 field and uses C style in the C interface. You can see this in the [2+1] length of the function prototype.
For a mainframe style you would got a length of [2] in the server frame.

If you use C style or Mainframe style on the C side should not effect the partner - field length is still 2 bytes (because of A2).

For an A1 field there is no difference in the mapping. It is mapped to a char type always in the C interface, not a string, neither C-style nor Mainframe style. But also this must not affect the partner - field length is still 1 byte (because of A1).

Your observation look like a bug. Can you provide a RPC Server trace with trace level support (Specify TraceLevel=SUPPORT in the config file) for the situation where it is not working and open a Support Request?

Regards Bernhard Fricke

[This message was edited by Bernhard Fricke on 05 Nov 2004 at 13:50.]

[This message was edited by Bernhard Fricke on 05 Nov 2004 at 13:51.]