NPAPI开发遇到有关问题,求教

NPAPI开发遇到问题,求教
初涉NP,需要个功能,获取页面的URL

BSTR GetURL1(NPP instance)
{
NPObject * pluginObj;
CString m_pSrc;
NPN_GetValue(instance,NPNVPluginElementNPObject,&pluginObj);
NPIdentifier n=NPN_GetStringIdentifier("src");
NPVariant rval;
NPN_GetProperty(npp,pluginObj,n,&rval);
if (NPVARIANT_IS_STRING(rval))
{
m_pSrc=NPVARIANT_TO_STRING(rval).UTF8Characters;
}
else
{
n=NPN_GetStringIdentifier("data");
NPN_GetProperty(npp,pluginObj,n,&rval);
if(NPVARIANT_IS_STRING(rval))
m_pSrc=NPVARIANT_TO_STRING(rval).UTF8Characters;
}
return m_pSrc.AllocSysString();
}

请问instance这个实例怎么获取?求代码

------解决方案--------------------
instance是浏览器调用你的NPAPI插件时传进来的。
------解决方案--------------------
npAPI 有两类函数,npn_gate 和 npp_gate,其中 npp 是浏览器调用 plugin 的函数,npn 是 plugin 调用 浏览器的,比如你的 GetUrl 最终就是调用
 
NPError NPN_GetURL(NPP instance, const char *url, const char *target);
 
或者
 
bool NPN_GetProperty(NPP npp, NPObject* obj, NPIdentifier propertyName, NPVariant *result);

 之类的函数。

但是,在浏览器创建 plugin 的时候,会调用 NPP_New 函数。 
// here the plugin creates an instance of our CPlugin object which 
// will be associated with this newly created plugin instance and 
// will do all the neccessary job
NPError NPP_New(NPMIMEType pluginType,
NPP instance,
uint16_t mode,
int16_t argc,
char* argn[],
char* argv[],
NPSavedData* saved)


你要的 npp 就是 instance 参数,你必须保存这个参数。以便以后使用。