xcode를 사용하여 xcode에서 macp10i 플러그인을 작성하고 플러그인에서 그림을 그리지 만 NPP_SetWindow (NPP)를 통해 pNPWindow-> window 포인터를 얻을 때 문제가 있습니다. 인스턴스, NPWindow * pNPWindow); 내가 nNPWindow-> 설정창이 NULL, 내가 문제를 찾기 위해 반드시 지출,하지만 난, 누군가가 나를 도울 수 없습니다 것을 찾을 수 있습니다. 죄송합니다, 내 영어 가난.NPAPI 플러그인이 mac10.8에서 개발되었습니다.
코드는 그와 같다
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 이벤트 모델을 협상해야합니다. Cocoa 이벤트 모델 동작 (NULL 윈도우 포인터)을보고 있었지만 게시 한 코드에 Cocoa 협상이 없으므로 64 비트로 테스트 한 것 같습니다. Cocoa는 64 비트에서 기본값이지만 32 비트가 아니기 때문에 Chrome에서 또는 플러그인을 32 비트 모드로 실행하는 사람들을 위해 플러그인을 사용하려면 두 가지 모두에 대해 컴파일해야합니다. – smorgan
아주 좋은 지적 – taxilian