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



Kurt,

I tried to find a quick link that would provide a better explanation
than I but was unsuccessful.

So off the top of my head:

You expect variables to have one of two scopes, global or local.  By
returning a pointer to a static local, you've in effect changed the
scope of that local variable.  This is not what one would expect to see
when the STATIC keyword is used.  The two reasons STATIC is used, to
allow the value of a procedure's local variable to held across calls to
the procedure and to eliminate the performance hit of large local
variables due to automatic storage initialization when the procedure is
called repeatedly.

There's no good reason to shy away to I/O parms for this procedure.  It
makes sense to try to return as much as possible, when dealing with
simple types, that way you can use the returned value in an expression.
But when dealing with a DS, you can't use the DS in an expression
anyway.

If you really want to, just return the DS if it is not too big.
Otherwise, either use a I/O parm or a global variable for this DS.  Note
that global variables in an ILE module all scoped to the module itself
an not the entire program/service program.  Such module level variables
come in handy.

HTH,

Charles Wilt
--
iSeries Systems Administrator / Developer
Mitsubishi Electric Automotive America
ph: 513-573-4343
fax: 513-398-1121
  

> -----Original Message-----
> From: rpg400-l-bounces@xxxxxxxxxxxx 
> [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Kurt Anderson
> Sent: Thursday, January 12, 2006 8:38 AM
> To: RPG programming on the AS400 / iSeries
> Subject: RE: Procedure returning a pointer, and debugging
> 
> Charles,
> 
> Thanks for the input.
> I guess my line of thought is that the procedure is returning a value,
> so I should avoid returning that value in a parm and return it in the
> return field (if that's the official term for it I'm not sure).  But,
> being a data structure storing multiple fields, I thought it best to
> return it by reference (return the pointer) instead of returning it by
> value.  The ActGrp I'm using is *New, and I have other fields 
> defined as
> static (albeit only used w/in the procedure in which they are 
> defined).
> 
> I see where you're coming from I think, but maybe an explanation (or a
> link) to why it's a no-no would be helpful.
> 
> Kurt Anderson
> Application Developer
> Highsmith Inc
> 
> -----Original Message-----
> From: rpg400-l-bounces@xxxxxxxxxxxx
> [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Wilt, Charles
> Sent: Thursday, January 12, 2006 7:14 AM
> To: RPG programming on the AS400 / iSeries
> Subject: RE: Procedure returning a pointer, and debugging
> 
> Kurt,
> 
> Glad it works, but IMHO you should reconsider doing this.  
> Passing back
> a point to a procedures private data is a big no-no.
> 
> Either return the DS itself, or pass a DS by reference into the
> procedure for update.
> 
> Just my .02
> 
> Charles Wilt
> --
> iSeries Systems Administrator / Developer Mitsubishi Electric 
> Automotive
> America
> ph: 513-573-4343
> fax: 513-398-1121
>   
> 
> > -----Original Message-----
> > From: rpg400-l-bounces@xxxxxxxxxxxx
> > [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Kurt Anderson
> > Sent: Wednesday, January 11, 2006 5:37 PM
> > To: RPG programming on the AS400 / iSeries
> > Subject: RE: Procedure returning a pointer, and debugging
> > 
> > Larry,
> > 
> > Your input lead me to the answer.
> > I didn't have the pointer in the subprocedure defined as 
> static, which
> 
> > is ok... But the problem I had is that I didn't have the data 
> > structure (which is what the pointer was pointing to) defined as 
> > Static.  So, I put the Static keyword on it and it works great.
> > 
> > Thanks,
> > 
> > Kurt Anderson
> > Application Developer
> > Highsmith Inc
> > 
> > -----Original Message-----
> > From: rpg400-l-bounces@xxxxxxxxxxxx
> > [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Larry Ducie
> > Sent: Wednesday, January 11, 2006 4:26 PM
> > To: rpg400-l@xxxxxxxxxxxx
> > Subject: Re: Procedure returning a pointer, and debugging
> > 
> > D'oh!
> >  
> > <snip>
> > Is the pointer defined as static..?
> > </snip>
> >  
> > Obviously, I meant: Is the pointer NOT defined as static..?
> >  
> > I must learn how to switch off this predictive-text keyboard!  ;-)
> >  
> > Larry Ducie
> >  
> > 
> > -----Original Message-----
> > From: Larry Ducie [mailto:Larry_Ducie@xxxxxxxxxxx]
> > Sent: 11 January 2006 22:19
> > To: rpg400-l@xxxxxxxxxxxx
> > Subject: Re: Procedure returning a pointer, and debugging
> > 
> > 
> > Hi Kurt,
> >  
> > Is the pointer you are passing back defined within the 
> procedure you 
> > are calling..? Is the pointer defined as static..?
> >  
> > If so you will have trouble because when the procedure returns the 
> > pointer will be destroyed. The OS may use up the memory 
> allocated to 
> > it for something else at any point, but when this occurs is 
> > indeterminate. So, a quick return may well result in data still 
> > untouched (and the chain
> > succeeding) , but if a long time elapses (like when 
> debugging) the OS 
> > may well allocate the storage to something else and "corrupt"
> > your data. It
> > may
> > be better to pass your pointer in as an input-output 
> variable and let 
> > the procedure write data to that. This way, your data will 
> still exist
> 
> > prior and after the call. This is how standard IBM APIs 
> usually work.
> >  
> > I believe that, even though the pointer is passed back by value you 
> > are simply setting your pointer to point to the same address as the 
> > pointer defined in your procedure (which no longer exists).
> >  
> > HTH
> >  
> > Larry Ducie
> > 
> > --
> > This is the RPG programming on the AS400 / iSeries 
> (RPG400-L) mailing 
> > list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, 
> > unsubscribe, or change list options,
> > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> > or email: RPG400-L-request@xxxxxxxxxxxx Before posting, 
> please take a 
> > moment to review the archives at 
> http://archive.midrange.com/rpg400-l.
> > 
> > 
> > --
> > This is the RPG programming on the AS400 / iSeries 
> (RPG400-L) mailing 
> > list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, 
> > unsubscribe, or change list options,
> > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> > or email: RPG400-L-request@xxxxxxxxxxxx Before posting, 
> please take a 
> > moment to review the archives at 
> http://archive.midrange.com/rpg400-l.
> > 
> > 
> 
> -- 
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
> 
> 
> -- 
> This is the RPG programming on the AS400 / iSeries (RPG400-L) 
> mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
> 
> 


As an Amazon Associate we earn from qualifying purchases.

This thread ...


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.