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



First, that C++ function GetPtrToArg() is one way to "lie" to the RPG compiler. It could be written using some simpler C code such as:

---------------------------
void * fun(void *ptr)
{ return ptr; }
---------------------------

Second, that function shouldn't be needed if the prototype for the procedure IfsWrite() defines the string parameter as "CONST OPTIONS(*VARSIZE)", instead of as a basing pointer.

Third, that code fragment probably doesn't work anyways. (Or doesn't work reliably.) In the statement "pData=fGetPtrToConst(InData);", since the input parameter doesn't match the parameter prototype (one's fixed length char, the other's varying), the value should get assigned to some compiler generated temp. The address returned by the function would be the address of the compiler generated temp, and not the address of the original CONST parameter. It may work now, but if the temp is handled differently by the compiler in the future, the code may break on recompile, with or without any source code change within the procedure.

Cheers! Hans

PS. It's Monday - have a nice day!


Peter Dow wrote:
Hi Steve,

Thanks for the reply.  I didn't know the iSeries had C++.  Otoh, given what
little I know about C or C++, the code you posted looks like C.  The problem
is how you use it.  Isn't your RPG code just getting the pointer to InChar,
not InData?  Or is it just that it's Monday a.m. and my brain isn't ticking
over yet?  And what's a "mutable" pointer?

Peter Dow
Dow Software Services, Inc.
909 793-9050 voice
909 793-4480 fax
909 522-3214 cell

From: "Steve Richter"

here is an ile c++ function that will return a mutable pointer to an rpg
const variable:

#include <stdio.h>
#include <errno.h>
void* GetPtrToArg( char& cIn )
{
void* pVoid ;
pVoid   = &cIn ;
return  pVoid ;
}




** ----------------------- fGetPtrToConst -------------------------
d fGetPtrToConst  pr              *   extproc('GetPtrToArg__FRc')
d InChar                     32767a   const options(*VarSize)

** ---------------------- fIfsWrite -----------------------------
** fIfsWrite - write string to IFS file
** hInFile       fComRef.hFile   open ifs file handle
** InData        vstr(*)        string to write to file.
pfIfsWrite        b                   export
dfIfsWrite        pi            10i 0
d hInFile                             value like(fComRef.hFile)
d InData                     32767a   const varying options(*VarSize)

d WriteCx         s             10i 0
d pData           s               *
/free
     pData       = fGetPtrToConst( InData ) ;
     WriteCx     = IfsWrite( hInFile:
                             pData:
                             %len(InData)) ;
     return      WriteCx ;
/end-free
p                 e


( curious to know how else to write the proc that uses this const breaking function )




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.507 / Virus Database: 304 - Release Date: 8/6/2003


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