I understood the difference in calling methods but I had implemented it incorrectly. In both my RPG & C prototypes I had an INT, whereas I should have had an INT in the RPG one and a pointer to INT in the C one. Once I had corrected the C prototype I was able to pass NULL and get it working. regards Stephen Osborn Financial Messaging & Integration Misys Banking Systems +44 (0)20 8486 1790 stephen.osborn@xxxxxxxxx
-----Original Message----- From: c400-l-bounces+stephen.osborn=misys.com@xxxxxxxxxxxx [mailto:c400-l-bounces+stephen.osborn=misys.com@xxxxxxxxxxxx] On Behalf Of Scott Klement Sent: 01 November 2006 17:35 To: C programming iSeries / AS400 Subject: Re: [C400-L] Calling an RPG procedure with optional parameters from C code RPG (by default) passes parameters by reference. C (by default) passes parameters by value. To pass a parameter by reference from C, you put a pointer on the prototype, and you pass the address of a variable to that pointer. RPG's *OMIT is equivalent to passing a NULL pointer. So, from C, you simply pass NULL instead of a variable. For example: prototype: void procname(char *param1, char *param2, char *param3, char *param4); code: char val1, val2, val3, val4; // set the "val" variables to useful values here procname( val1, NULL, val3, val4); - or - procname( NULL, val2, val3, val4); etc, etc. -- Scott Klement http://www.scottklement.com On Wed, 1 Nov 2006, Osborn, Stephen wrote:I have RPG procedures where the first two parameters arealternates, i.e.values must be supplied for param1, param3, param4, etc or param2, param3, param4, etc Using *OMIT I can call these in either mode from RPG, e.g. callp procname(value1 : *OMIT : value3 : value4) or callp procname(*OMIT : value2 : value3 : value4) However I need to call some of these routines from somelegacy C code.How do I specify in C (both the prototype and the code)that param1 ¶m2 can be *OMIT'd?