我有一些問題,我用xcode在mac10.8上寫了一個npapi插件,我想在插件上繪製一張圖片,但是當我通過NPP_SetWindow獲得pNPWindow->窗口指針時(NPP實例,NPWindow * pNPWindow);我發現,nNPWindow->窗口爲NULL,我花一定要找到這個問題,但我不能,有人能幫助我。對不起,我的英語這麼差。在mac10.8上開發的NPAPI插件
代碼就是這樣,
NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved)
{
if(instance == NULL)
return NPERR_INVALID_INSTANCE_ERROR;
CPlugin *plugin = new CPlugin(instance);
if(plugin == NULL)
return NPERR_OUT_OF_MEMORY_ERROR;
instance->pdata = (void *)plugin;
NPBool supportsCG = false;
NPError err;
err = browser->getvalue(instance, NPNVsupportsCoreGraphicsBool,&supportsCG);
if (err == NPERR_NO_ERROR && supportsCG)
browser->setvalue(instance,NPPVpluginDrawingModel,(void*)NPDrawingModelCoreGraphics);
return NPERR_NO_ERROR;
}
NPError NPP_SetWindow(NPP instance, NPWindow* pNPWindow)
{
if(instance == NULL)
return NPERR_INVALID_INSTANCE_ERROR;
if(pNPWindow == NULL)
return NPERR_GENERIC_ERROR;
if(pNPWindow->window)
writelog("window != NULL");
if(pNPWindow->window == NULL) //this is he problem pNPWindow->window always NULL
writelog("window == NULL");
return NPERR_NO_ERROR;
}
作爲後續工作,如果您希望插件在現代瀏覽器中作爲32位插件工作,則應該與CoreGraphics繪圖模型一起協商Cocoa事件模型。我猜你正在測試64位,因爲你看到Cocoa事件模型的行爲(NULL窗口指針),但沒有在你發佈的代碼中使用Cocoa協商。 Cocoa是64位的默認值,但不是32位,如果你希望你的插件在Chrome中(或者在32位模式下啓動瀏覽器的人)工作,你應該爲這兩者編譯。 – smorgan
非常好的一點 – taxilian