私は、より大きなGTKmm/C++アプリケーションでWebKitGTK +を使用しています。 JavaScriptCoreを使用して、WebKitWebFrameおよびJSContextと対話します。コールバックには、オブジェクトのインスタンスメンバを渡すためのconst関数が必要です
javascript関数が呼び出されたときにGTK GUIコンポーネントとやり取りする必要があるため、今は止まっています。この目的のために私はJSObjectMakeFunctionWithCallback関数を見つけました。コールバックはDEFと静的関数として定義する必要があります
JSStringRef str = JSStringCreateWithUTF8CString("ClickCallback");
JSObjectRef func = JSObjectMakeFunctionWithCallback(m_jsRef, str, ClickCallback);
JSObjectSetProperty(m_jsRef, JSContextGetGlobalObject(m_jsRef), str, func, kJSPropertyAttributeNone, NULL);
JSStringRelease(str);
:
static JSValueRef ClickCallback(JSContextRef ctx, JSObjectRef func, JSObjectRef self, size_t argc, const JSValueRef argv[], JSValueRef* exception)
私は私がする必要があるGUIコンポーネントに戻って取得するためにコールバックで私のオブジェクトのインスタンスを必要とする以外だから、すべてが働いています操作する。
SOに類似した質問がたくさんありますが、ほとんどの場合、オブジェクトインスタンスをコールバックに渡すことに焦点を当てています。私はこのAPIでこれを行う方法を見ることができません。
アイデア?
静的関数でなくともメンバ関数である必要はありません。 –
APIは、何らかの「コンテキスト」クッキー(通常はvoid *)を渡すことなく、コールバックを登録できるようにすると嫌です。 –
@エミール - まさに。 V8では、特別な 'Data'ポインタを関数に渡される' Arguments'オブジェクトに付加することで、これを可能にしています。とても苦労しない。 – namuol