| < 2009年8月 > | ||||||
|---|---|---|---|---|---|---|
| 26 | 27 | 28 | 29 | 30 | 31 | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | 1 | 2 | 3 | 4 | 5 |
次の日記: 2009/10/17 17:24 [filterpipelineprintproc.dllを倒す]
| < 2009年8月 > | ||||||
|---|---|---|---|---|---|---|
| 26 | 27 | 28 | 29 | 30 | 31 | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | 1 | 2 | 3 | 4 | 5 |
2009/08/08の続き。
今日は関数をオブジェクトに定義して返してみる。
// returns a string "hoge"
static JSBool js_hoge(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
*rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, "hoge"));
return JS_TRUE;
}
// returns an object with declared function "call"
static JSBool js_hello(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
JSObject *object = JS_NewObject(cx, NULL, NULL, NULL);
if(!object)
return JS_FALSE;
if(!JS_DefineFunction(cx, object, "call", js_hoge, 0, 0))
return JS_FALSE;
*rval = OBJECT_TO_JSVAL(object);
return JS_TRUE;
}
// initialiser
JSObject *js_InitMyClass(JSContext *cx, JSObject *obj) {
if(!JS_DefineFunction(cx, obj, "hello", js_hello, 0, 0))
return NULL;
return (JSObject *)1;
}
test.jsはこんな感じに。
var o = hello();
print("o = " + o);
print("o.call = " + o.call);
print("o.call() = " + o.call());
実行結果。
% ./FreeBSD7.1-RELEASE-p6_DBG.OBJ/js test.js
o = [object Object]
o.call = function call() {
[native code]
}
o.call() = hoge
ちゃんと呼べてる。これで外部APIを呼ぶ準備ができた。
<Trackback URI> http://linkage.white-void.net/cgi/tb.cgi/diary/2009081101
コメントフォーム