On 31.07.2014 15:52, Rick McGuire wrote:
> Just took a peek at the code and FindClass() searches both .local and 
> .environment.  My guess is
> you added that class to .local somewhere.
Well, I double-checked on that already, hence I will file a bug and upload the 
sources with the 32-
and 64-bit Linux-Makefiles and ooRexx programs using that infrastructure making 
sure they hit that
part of the native code, also with the setup information needed to get it 
running on Linx. (It will
be work in progress hence the code is not tidied up yet.)

The preparation of the code and accompanying information will take some time 
though, being off on
the weekend, it may take me until Monday, I am afraid.

---rony


>
> On Thu, Jul 31, 2014 at 9:27 AM, Rony G. Flatscher <[email protected]
> <mailto:[email protected]>> wrote:
>
>     Hmm, went thru the source code to find all FindClass() usages to check 
> them out.
>
>     There is one case where AttachThread() - returning a thread context - is 
> used and where
>     FindClass() would find a context class (one that is definitely not in 
> .environment). Not sure
>     why, not sure whether an error or not, but wanted to report it, therefore 
> I enclose that code
>     snippet below.
>
>     If this is indeed an error then please let me know as I would need to 
> solve the problem
>     differently then as the code is dependent on getting access to that class.
>
>     ---rony
>
>     P.S.: Code snippet that is able to find a non-.environment-class with 
> FindClass():
>
>         // 
> --------------------------------------------------------------------------------
>         void new_connection_callback (DBusServer *server, DBusConnection 
> *conn, void *data) // callback on new connection
>         {
>             PSTRUCT_CALLBACK_DATA cbd=(PSTRUCT_CALLBACK_DATA) data;
>             RexxThreadContext    *rtc=NULL;
>             logical_t              rc=cbd->*rxInstance->AttachThread(&rtc);*  
> // attach to Rexx interpreter instance
>             if (rc==false)
>             {
>                 fprintf(stderr, "%.16s/\"new_connection_callback(...)\", 
> fatal error # 1: cannot attach thread to saved Rexx interpreter instance, 
> aborting with 'exit(-1)'\n", DLLNAME);
>                 fflush(stderr),
>                 exit(-1);
>             }
>
>                 // can the connection be anonymous ?
>             if (rtc->SendMessage0(cbd->rxDbusServer, "ALLOWANONYMOUS") == 
> rtc->True())
>             {
>                 dbus_connection_set_allow_anonymous(conn, true);
>             }
>
>             dbus_connection_ref(conn);  // let this connection be kept open
>
>                 // define pseudo-address for connection
>             RexxStringObject rsoDT=GET_REXX_DATE_TIME_AS_REXX_STRING(rtc);
>             RexxStringObject 
> rsoAddr=rtc->String("native:connectionFromclient@");
>             RexxStringObject rsoAddrWithDT=(RexxStringObject) 
> rtc->SendMessage1(rsoAddr, "||", rsoDT);
>
>                 // create an instance of DBus (a connection)
>             RexxClassObject      rco=*rtc->FindClass("DBUS");*    // get class
>             RexxObjectPtr rxDBusConn=rtc->SendMessage1(rco, "NEW", 
> rtc->String("native"));  // get DBus (bus connection) object
>             // RexxObjectPtr rxDBusConn=rtc->SendMessage0(rco, "NEW"); // get 
> DBus (bus connection) object
>
>             rtc->SendMessage1(rxDBusConn, "PSEUDOADDRESS=", rsoAddrWithDT); 
> // set CSELF
>
>                 // save conn in a Rexx pointer object and save it as CSELF
>             RexxPointerObject rpo = rtc->NewPointer(conn);
>             rtc->SendMessage1(rxDBusConn, "CSELF=",         rpo); // set CSELF
>             // rtc->SendMessage1(rxDBusConn, "BUSTYPE=", 
> rtc->String("private"));  // set bus type
>             rtc->SendMessage1(rxDBusConn, "SERVER=", cbd->rxDbusServer);      
>   // set server this connection belongs to
>
>                 // let Rexx code setup (save to connections, assigning 
> default service and listener objects)
>             rtc->SendMessage1(cbd->rxDbusServer, "NEWCONNECTION", rxDBusConn);
>         }
>
>
>
>
>
>
>     On 31.07.2014 13 <tel:31.07.2014%2013>:52, Rony G. Flatscher wrote:
>>     On 31.07.2014 13 <tel:31.07.2014%2013>:44, Rick McGuire wrote:
>>>     FindClass is a thread context API, which is invoked outside of the 
>>> context of any running
>>>     code.  As such, it is limited to locating those classes that are 
>>> provided by the system
>>>     (i.e., in .environment).  FindContextClass performs the same sort of 
>>> search that would occur
>>>     in any piece of Rexx code where it can find any classes defined in your 
>>> package as well as
>>>     any public classes pulled in by other packages that code has loaded 
>>> (via ::requires, for
>>>     example).
>>     Ahh, thank you very much!
>>
>>     ---rony
>>
>>
>>>
>>>     On Thu, Jul 31, 2014 at 7:38 AM, Rony G. Flatscher 
>>> <[email protected]
>>>     <mailto:[email protected]>> wrote:
>>>
>>>         What is the differenct between FindClass() and FindContextClass()?
>>>
>>>         The documentation for FindClass() says: "Locates a Class object in 
>>> the current thread
>>>         context."
>>>
>>>         The documentation for FindContextClass() says: "Locate a Class 
>>> object in the current
>>>         Method or
>>>         Routine Package context."
>>>
>>>         Both functions are available for native routines. The (public) 
>>> class that cannot be found by
>>>         FindClass() is defined in the package that invoked the native Rexx 
>>> routine. Actually the
>>>         native Rexx
>>>         routine is called from methods of that class, that cannot be found.
>>>
>>>         FindContextClass() will find that (public) class.
>>>
>>>         ---rony
>>>

------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to