Just took a peek at the code and FindClass() searches both .local and
.environment.  My guess is you added that class to .local somewhere.

Rick


On Thu, Jul 31, 2014 at 9:27 AM, Rony G. Flatscher <[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:52, Rony G. Flatscher wrote:
>
> On 31.07.2014 13: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]> 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
>
>
------------------------------------------------------------------------------
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