×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




The prototype doesn't need VALUE.

Change your prototype to pass the datastructure instead of a pointer.

ResultP = pr_multiply01(WsStubP:TempInF);

Should work...he says now wishing he hadn't replied this late :)

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Crispin
Sent: Wednesday, February 25, 2009 12:55 AM
To: 'RPG programming on the IBM i / System i'
Subject: RE: RPG -to- C (writing IBM IWS client code)

Larry, looking more closely, I think this would work...

ResultP = pr_multiply01(WsStubP:TempInF);

And on your prototype, add VALUE to the DS definition.

That way the datastructure passed will contain two pointers to your data,
and not be a single pointer to 2 pointers...

Hope I got that right, it's getting late :-)

Crispin.

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Crispin
Sent: Wednesday, February 25, 2009 12:13 AM
To: 'RPG programming on the IBM i / System i'
Subject: RE: RPG -to- C (writing IBM IWS client code)

Larry,

RPG passes parameters by reference as the default (which means it passes a
pointer to the data). So, you're passing a pointer to a pointer at the
moment, which is why it is not working.

Just pass the integer values...

Crispin.

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Larry Ducie
Sent: Tuesday, February 24, 2009 9:54 PM
To: RPG400
Subject: RPG -to- C (writing IBM IWS client code)


Hi guys, gals,



We have been playing with the Integrated Web Service for i
(w-03.ibm.com/systems/i/software/iws/index.html) and we have had some
successes.



However...



We have created a test service (from a RPG service program) which takes 2
input parms and returns a result. The service requires the input data to be
sent as a complex type. Thus, the C stubs generated has the input data as a
struct containing 2 pointers - each pointing to a long integer.





C Signature:

extern PR_MULTIPLY01Result* pr_multiply01(AXISCHANDLE pStub,
PR_MULTIPLY01Input* Value0);



C Structure:

typedef struct PR_MULTIPLY01InputTag {

xsdc__decimal* _LP_INPNUM01;

xsdc__decimal* _LP_INPNUM02;

} PR_MULTIPLY01Input;



RPG:

D TempInF DS

D pvalue1 * inz(%addr(value1))

D pValue2 * inz(%addr(value2))



// Initialize input values.

value1 = %dec(TEMP1:20:0);

value2 = %dec(TEMP2:20:0);



// Invoke the ConvertTemp Web service operation.

ResultP = pr_multiply01(WsStubP:%Addr(TempInF));



Could you please advise how best to pass my two 20i 0 values as the second
parm to this procedure?



I currently have a DS containing 2 pointers (each pointing to a long int)
and I pass the address of the DS. This does not work.


Any help would be most appreciated. Particularly if you have worked with
complex types in a IWS client and have already cracked this one.


Cheers



Larry Ducie



_________________________________________________________________
It's simple! Sell your car for just $50
http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Fsecure%2Dau%2Eimrworldwide%2
Ecom%2Fcgi%2Dbin%2Fa%2Fci%5F450304%2Fet%5F2%2Fcg%5F801459%2Fpi%5F1004813%2Fa
i%5F859641&_t=762955845&_r=tig_OCT07&_m=EXT

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.