ucchen
October 10, 2013, 2:32am
#1
typedef struct Event Event;
struct Event {
EventData* const data;
int intValue;
float floatValue;
const char* stringValue;
};
typedef struct EventData EventData;
struct EventData {
const char* const name;
int intValue;
float floatValue;
const char* stringValue;
};
i want to bingding this special struct such as CCPoint.
in cocos2d-x CCPoint use this function manual binding
jsval ccpoint_to_jsval(JSContext* cx, CCPoint& v) {
JSObject *tmp = JS_NewObject(cx, NULL, NULL, NULL);
if (!tmp) return JSVAL_NULL;
JSBool ok = JS_DefineProperty(cx, tmp, "x", DOUBLE_TO_JSVAL(v.x), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, "y", DOUBLE_TO_JSVAL(v.y), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT);
if (ok) {
return OBJECT_TO_JSVAL(tmp);
}
return JSVAL_NULL;
}
but in my special struct is nested another struct. how to binding this nested struct? anyone have a good idea? thx
WenHai
October 10, 2013, 4:03am
#2
jsval eventdata_to_jsval(JSContext* cx, EventData& v) {
JSObject tmp = JS_NewObject;
if return JSVAL_NULL;
JSBool ok = JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT);
if {
return OBJECT_TO_JSVAL;
}
return JSVAL_NULL;
}
jsval event_to_jsval {
JSObject tmp = JS_NewObject(cx, NULL, NULL, NULL);
if (!tmp) return JSVAL_NULL;
JSBool ok = JS_DefineProperty(cx, tmp, “intValue”, INT_TO_JSVAL(v.intValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, “floatValue”, DOUBLE_TO_JSVAL(v.floatValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, “stringValue”, c_string_to_jsval(cx,v.stringValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, “data”, eventdata_to_jsval(cx,*v.data), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT);
if (ok) {
return OBJECT_TO_JSVAL(tmp);
}
return JSVAL_NULL;
}
ucchen
October 10, 2013, 7:32am
#3
thx, it work.
but i have another question about special class.
here is a test code:
class b
{
public:
void setB();
};
class a : public b
{
public:
void setA();
};
when i binding class A, i can use setA in JS, but i can’t use setB, if we overload setB in class A, setB is work in JS, but overload setB in class A is the only way to solve this situition?
class a: public b
{
public:
void setA();
void setB() { b::setB(); }
};
has another way to solve this question?
lp43
October 13, 2013, 3:33am
#4
WenHai Lin wrote:
jsval eventdata_to_jsval(JSContext* cx, EventData& v) {
JSObject tmp = JS_NewObject;
if return JSVAL_NULL;
JSBool ok = JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty, NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT);
if {
return OBJECT_TO_JSVAL;
}
return JSVAL_NULL;
}
jsval event_to_jsval {
JSObject tmp = JS_NewObject(cx, NULL, NULL, NULL);
if (!tmp) return JSVAL_NULL;
JSBool ok = JS_DefineProperty(cx, tmp, “intValue”, INT_TO_JSVAL(v.intValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, “floatValue”, DOUBLE_TO_JSVAL(v.floatValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, “stringValue”, c_string_to_jsval(cx,v.stringValue), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) &&
JS_DefineProperty(cx, tmp, “data”, eventdata_to_jsval(cx,*v.data), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT);
if (ok) {
return OBJECT_TO_JSVAL(tmp);
}
return JSVAL_NULL;
}
Hi,WenHai Lin,
How do you write JS BINDING code as above?