Thank you! But now I have another problem: Compilation fails with the message: /usr/include/v8/v8.h: In constructor ‘v8::Handle<T>::Handle(v8::Handle<S>) [with S = v8::FunctionTemplate, T = v8::Value]’: v8js.cc:112: instantiated from here /usr/include/v8/v8.h:204: error: cannot convert ‘v8::FunctionTemplate*’ to ‘v8::Value*’ in assignment
I tried changes in the jsfn typedef definition, but it didn't worked too. Any clues? Thank you again! Luis Otavio de Colla Furquim On Thu, Jun 4, 2009 at 2:40 AM, Matthias Ernst <[email protected]> wrote: > > On Thu, Jun 4, 2009 at 12:45 AM, Luis Furquim <[email protected]> wrote: >> No, the problem is not with the C++ functions registered >> to JS before the script->Run() call. The problem occurs >> when, "during the JS run", the JS program calls a C++ >> function which in turn tries to register new functions >> via global->set. >> >> Actually what I am trying to do is create a function >> called import that, as python's import, makes new >> modules available to the running script. >> >> I attached the files. The javascript program starts with >> a call to import("./rename.so"); which calls a function >> named "ImportJSModule" in the v8js.cc program. >> >> This function uses dlopen to dynamically link rename.so >> (which came, obviously, from rename.cc), then it calls >> a function named startup which tells ImportJSModule >> that it has the symbol "rename". So, ImportJSModule >> call dlsym to get a pointer to it. Then, ImportJSModule >> calls global->set to register "rename" and make it > > You are manipulating the global object *template* after creating the > context. The context's global object made a *copy* of the template's > properties, so changing the template afterwards will not modify the > already existing global object. You rather need to do > "context->Global()->Set(String::New("rename"), function)" . > > Matthias > >> available to the javascript program. There's no error >> until there. But, when the javascript program tries to >> call "rename", it gets the ReferenceError message. >> >> That's the problem. >> >> Thank you >> >> Luis Otavio de Colla Furquim >> >> On Wed, Jun 3, 2009 at 7:18 PM, Dennis Honeyman <[email protected]> wrote: >>> >>> Umm, I think you need to put the global->Set(...) before creating the >>> context and entering the context scope... >>> >>> --- >>> v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New(); >>> global->Set(v8::String::New("print"), v8::FunctionTemplate::New(Print)); >>> v8::Handle<v8::Context> context = v8::Context::New(NULL, global); >>> v8::Context::Scope context_scope(context); >>> --- >>> >>> I think that'll work, provided you use the proper format for the function... >>> >>> > >>> >> >> >> >> -- >> Luis Otavio de Colla Furquim >> Não alimente os pingos >> Don't feed the tribbles - http://www.thinkgeek.com/geektoys/plush/ac6e/ >> By the nice edges of dataly graphs I shall walk >> http://www.furquim.org/chironfs/ >> >> > >> > > > > -- Luis Otavio de Colla Furquim Não alimente os pingos Don't feed the tribbles - http://www.thinkgeek.com/geektoys/plush/ac6e/ By the nice edges of dataly graphs I shall walk http://www.furquim.org/chironfs/ --~--~---------~--~----~------------~-------~--~----~ v8-users mailing list [email protected] http://groups.google.com/group/v8-users -~----------~----~----~----~------~----~------~--~---
