|
Hello Dave, You can avoid using a system pointer to access a user space by using the Retrieve (Space) Pointer to User Space (QUSPTRUS) API and the LOCKSL function together: **-- Control pecifications: -------------------------------------------** H Option( *SrcStmt ) **-- API error information: D ERRC0100 Ds Qualified D BytPro 10i 0 Inz( %Size( ERRC0100 )) D BytAvl 10i 0 D MsgId 7a D 1a D MsgDta 256a **-- Local constants: D LSRD_LOCK c x'80' D LSRO_LOCK c x'40' D LSUP_LOCK c x'20' D LEAR_LOCK c x'10' D LENR_LOCK c x'08' **-- Global variables: D pUsrSpc s * **-- Global constants: D USR_SPC c 'USRSPC001 QUSRSYS' **-- Create user space: D CrtUsrSpc Pr ExtPgm( 'QUSCRTUS' ) D SpcNamQ 20a Const D ExtAtr 10a Const D InzSiz 10i 0 Const D InzVal 1a Const D PubAut 10a Const D Text 50a Const D Replace 10a Const Options( *NoPass ) D Error 32767a Options( *NoPass: *VarSize ) D Domain 10a Const Options( *NoPass ) **-- Retrieve pointer to user space: D RtvPtrSpc Pr ExtPgm( 'QUSPTRUS' ) D SpcNamQ 20a Const D SpcPtr * D Error 32767a Options( *NoPass: *VarSize ) **-- Delete user space: D DltUsrSpc Pr ExtPgm( 'QUSDLTUS' ) D SpcNamQ 20a Const D Error 32767a Options( *VarSize ) **-- Lock space location: D LckSpcLoc Pr ExtProc( '_LOCKSL1' ) D SpcLoc * Const D LckRqs 1a Const **-- Unlock space location: D UnlckSpcLoc Pr ExtProc( '_UNLOCKSL1' ) D SpcLoc * Const D LckRqs 1a Const /Free CrtUsrSpc( USR_SPC : 'LOCKSL' : 1024 : x'00' : '*CHANGE' : *Blanks : '*YES' : ERRC0100 ); RtvPtrSpc( USR_SPC: pUsrSpc: ERRC0100 ); LckSpcLoc( pUsrSpc: LENR_LOCK ); // Update user space... UnlckSpcLoc( pUsrSpc: LENR_LOCK ); DltUsrSpc( USR_SPC: ERRC0100 ); Return; /End-Free This way you get the user space's space pointer directly as opposed to retrieve a system pointer to the user space object and then use the setsppfp function to get to the object's space pointer. Best regards, Carsten Flensburg ----- Original Message ----- From: "Dave Schnee" <DSchnee@xxxxxxxxxxxxxxxxxxx> To: <midrange-l@xxxxxxxxxxxx> Sent: Wednesday, June 14, 2006 3:10 PM Subject: Re: Fastest access: user space, data area, data queue
Dave: The problem is that RPGLE cannot handle nor pass a "system pointer" at all. When you look at a pointer in RPGLE, you can see a procedure
pointer
or a space pointer and show its value (say, using STRDBG). If you pass
a
system pointer back from MI or C to RPGLE, the "pointer" attribute (and value) are lost. So, yes, I did try, but I had to keep the system pointer stored in a C module and use an entry to that module to use the LOCK/UNLOCK mechanism
to
get this to work.
As an Amazon Associate we earn from qualifying purchases.
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.