Subj : beginner question spidermonkey To : netscape.public.mozilla.jseng From : marian simon Date : Fri Aug 27 2004 01:02 am Hi, I need some help for implementing the Spidermonkey to my C++-Application. How can I access variables in my application that are defined in the javascript? I have 2 classes, dok and ele, and want to access them from javascript. Has anyone a good tutorial/sample how to implement this engine? (I know already http://www.mozilla.org/js/spidermonkey/ and jsshell) sample : ----- my javascript : ----- var e1; var e2; e1=dokument.getElementById(4); e2=dokument.getElementById(5); e2.getName(); // return String "element 5" -> OK e1.getName(); // return String "element 5" -> BAD Pointer ? ----- my C-Applcation : ----- class element { public: char name[30]; char* get_name(){return name;}; }; class document{ public: element* list[10]; }; ele *element; doc *document; // **************************************************************************** ***************** main{ int i; //init for my class doc= new dokument(); for(i=0;i<10;i++) { ele = new element(); sprintf(tmpstr,"element %d",i); strcpy(ele->name,tmpstr); doc->list[i] = ele; } .....bla bla .......javascript INIT glob = JS_NewObject(cx, &global_class, NULL, NULL); if (!glob) return 1; JS_SetGlobalObject(cx, glob); if (!JS_DefineFunctions(cx, glob, shell_functions)) return 1; js_element = JS_DefineObject(cx, glob, "element", &element_class, NULL, 0); if (!js_element) return 1; js_dokument = JS_DefineObject(cx, glob, "dokument", &dokument_class, NULL, 0); if (!js_dokument) return 1; if (!JS_DefineFunctions(cx, js_dokument, dokument_functions)) return 1; if (!JS_DefineFunctions(cx, js_element, element_functions)) return 1; ......RUN } // **************************************************************************** ***************** static JSFunctionSpec element_functions[] = { {"getName",getName, 0}, {0} }; static JSFunctionSpec dokument_functions[] = { {"getElementById",getElementById, 0}, {"getElementByTagName",getElementByTagName, 0}, {0} }; // **************************************************************************** ***************** static JSBool getName (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { char *name; name=ele->get_name(); //not good ?? printf("get_Name() name = %s obj=0x%x argc=%d \n",name,obj,argc); return JS_TRUE; } // **************************************************************************** ***************** static JSBool getElementById (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { int i; argc--; i=JSVAL_TO_INT(argv[argc]); ele=doc->list[i]; //not good ?? printf("getElementById() ele= 0x%x obj=0x%x\n",ele,obj); *rval = OBJECT_TO_JSVAL(js_element); return JS_TRUE; } .