× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



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 ...

Follow-Ups:
Replies:

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

This mailing list archive is Copyright 1997-2024 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.