|
Brief code snippets for this Service Program, which is running in Activation Group QSRV. This is the version used with a Pointer for the Receiver Variable, which always came back *Null whether the pointer was allocated or not. Some of the information, prefixed "dQD", comes from the Retrieve Data Queue Description API successfully called prior to this call. Fields prefixed "pp" are passed into this procedure. D @lenOfDQEntLst... D S 9B 0 D @dQEntListPtr... D S * Inz(*Null) D @dQELFName S 8 Inz('RDQM0100') D @lenOfMSelInf S 9B 0 Inz(8) D @mSelInfFName S 8 Inz('RDQS0100') DDQSelInf01DS DS D @dQSelectionType... D 1 D @dQReserved02... D 3 D @dQNumberOfMessageTextBytesToRetrieve... D 9B 0 DDQEntInfHdrDS DS Based(@dQEntHdrDSPtr) D @dQBytesReturned... D 9B 0 D @dQBytesAvailable... D 9B 0 D @dQNumberOfMessagesReturned... D 9B 0 D @dQNumberOfMessagesAvailable... D 9B 0 D @dQMessageKeyLengthReturned... D 9B 0 D @dQMessageKeyLengthAvailable... D 9B 0 D @dQMessageTextLengthReturned... D 9B 0 D @dQMessageTextLengthAvailable... D 9B 0 D @dQEntryLengthReturned... D 9B 0 D @dQEntryLengthAvailable... D 9B 0 D @dQOffsetToFirstMessageEntry... D 9B 0 D @dQActualDataQLibraryName... D 10 D @dQReserved01... D 1 D @dQEntHdrDSPtr S * Inz(*Null) C Eval @lenOfDQEntLst = C (@dQDMessageLength * @dQDNumberOfMessages) C + %Len(DQEntInfHdrDS) C + ((%Len(DQEntInfDS) * @dQDNumberOfMessages)) C Eval @qualDQName = ppDataQName + ppDataQLibrary C Eval @dQSelectionType = 'A' C Eval @dQNumberOfMessageTextBytesToRetrieve = C @dQDMessageLength *================== * Call API to Retrieve Data Queue Entries C Call (E) 'QMHRDQM' C Parm @dQEntListPtr Receiver Variable C Parm @lenOfDQEntLst Length of Receiver Variable C Parm @dQELFName Format name C Parm @qualDQName Qualified Data Queue Name C Parm DQSelInf01DS Message Selection Information C Parm @lenOfMSelInf Length of Message Selection Information C Parm @mSelInfFName Message Selection Information Format Name C Parm APIErrorDS Error Data Structure As stated, the pointer as a Receiver Variable is always returned *Null. But, if the pointer is changed to a field name, the API immediately starts to work and returns information. D @dQEntListDta... D S 32767 Based(@dQEntListPtr) C If @dQEntListPtr = *Null C Eval @lenOfDQEntLst = %Len(@dQEntListDta) C Alloc @lenOfDQEntLst@dQEntListPtr C EndIf *================== * Call API to Retrieve Data Queue Entries C Call (E) 'QMHRDQM' C Parm @dQEntListDta C Parm @lenOfDQEntLst C Parm @dQELFName C Parm @qualDQName C Parm DQSelInf01DS C Parm @lenOfMSelInf C Parm @mSelInfFName C Parm APIErrorDS The problem with this method is the 32K limit, which in our case, where we have Data Queues backed up with a lot of entries and some Queues which have long lengths, we can't return enough information to satisfy our users. Also, many API's return a Receiver Variable, and I have yet been able to get any of them to work with a pointer, including both external calls and procedural calls. Having the ability to utilize more memory dynamically would be a big plus in using the API's. Again, any help would be greatly appreciated. > ---------- > From: Jim Langston[SMTP:jimlangston@conexfreight.com] > Reply To: RPG400-L@midrange.com > Sent: Tuesday, December 19, 2000 5:09 PM > To: RPG400-L@midrange.com > Subject: Re: QMHRDQM API - Retrieve Data Queue Message > > Mark, > > It would help us out tremendously if you would paste the code snippet > where you are declaring the API and using it. > > Regards, > > Jim Langston > > Mark Drazic wrote: > > > > I am unable to get this API to return the pointer for the Receiver > Variable > > (1st parm). Whether I send a *NULL pointer, or an already allocated > one, > > the API always returns the pointer as *NULL. All other parms appear to > be > > correct, there are no error messages issued by the API, and entries do > exist > > on the Queue based on the results from the QMHQRDQD API. If I can't use > a > > pointer, I am limited to a field size of 32,767 for all the Data Queue > > entries, which will probably not be workable. > > > > Is there some trick to getting this to work? I am calling the API from > a > > Service Program in an Activation Group called QSRV, could this be > affecting > > the results? I have noticed this problem in calling other IBM API's, > and > > RPG ILE needs to be able to receive pointer information for these types > of > > functions. > > > > Any help would be greatly appreciated. > +--- > | This is the RPG/400 Mailing List! > | To submit a new message, send your mail to RPG400-L@midrange.com. > | To subscribe to this list send email to RPG400-L-SUB@midrange.com. > | To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com. > | Questions should be directed to the list owner/operator: > david@midrange.com > +--- > +--- | This is the RPG/400 Mailing List! | To submit a new message, send your mail to RPG400-L@midrange.com. | To subscribe to this list send email to RPG400-L-SUB@midrange.com. | To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: david@midrange.com +---
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.