0

Python を埋め込む場合PyCapsule、Python コードから変更できない C ポインターを含むオブジェクトを作成する型があります。つまり、C コードでのみ使用されるものを渡すのに最適です。

私のアプリケーションは SpiderMonkey エンジンを介して JavaScript もサポートしているため、SpiderMonkey で同様のものを探しています。JSClassフラグを使用してカスタムを作成できることは知っていますが、JSCLASS_HAS_PRIVATE別のよりシンプルで軽量なアプローチがあるのではないかと思います。

4

1 に答える 1

1

似たようなものは何もないので、実際にはカスタム クラスを作成する必要があります。これは私が最終的に使用したコードです。ポインタを格納するための新しいクラス「リソース」を定義します。Python の方法ほどきれいではありませんが、それでも非常に簡単です。

// Define the class and give it some private space for the pointer
static JSClass resource_class = { "Resource", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub,
    JS_PropertyStub, JS_StrictPropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub,
    JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS };

// Create an object and store the pointer
JSObject *obj = JS_NewObject(cx, &resource_class, NULL, NULL);
JS_SetPrivate(cx, obj, MY_POINTER);

// Get the pointer
void *ptr = JS_GetPrivate(cx, obj);
于 2012-07-26T23:52:03.320 に答える