我在更大的GTKmm/C++應用程序中使用WebKitGTK +。我正在使用JavaScriptCore與WebKitWebFrame和JSContext進行交互。回調需要const函數,如何通過對象的實例成員
因爲我需要在調用JavaScript函數時與GTK GUI組件進行交互,所以我現在被卡住了。爲此我找到了JSObjectMakeFunctionWithCallback函數。
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時讓你註冊回調而不讓你傳遞某種「上下文」cookie(通常是void *)。 –
@Emile - 的確如此。 V8允許通過將一個特殊的'Data'指針附加到傳遞給該函數的'Arguments'對象,至少。節省了很多麻煩。 – namuol