• NPAPI插件开发记录(三)npapi 函数返回值(转)


    文章来源:http://hi.baidu.com/hwygy_001/item/fda015d1803aaa12e0f46fac

    npapi 函数返回值(返回BOOL,String,Int给调用Plugin的浏览器函数)

    一直以来都习惯于js代码调用plugin函数返回调用成功失败的bool值,前两天项目需要函数调用返回一个字符串,本以为很简单的东西,就是一个返回值而已,不想却大动干戈,查找了很久都找不到原因,返回bool, int都可以,唯独string会出错,最后通过不断的google,终于找到了解决方法。先来看下NPAPI提供的转换方法:

    BOOLEAN_TO_NPVARIANT

    INT32_TO_NPVARIANT

    DOUBLE_TO_NPVARIANT

    STRINGZ_TO_NPVARIANT

    OBJECT_TO_NPVARIANT

    通常情况下直接调用转换方法,把要返回的值赋值给返回指针就好了。通常是invoke(NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result) 方法里面的result.

    例如,

    要返回一个布尔值以判断函数调用成功还是失败,BOOL bReturn = m_ctrlWnd.SetCtrlParam(para);  BOOLEAN_TO_NPVARIANT(bReturn, *result); 就可以直接这么调用。函数调用成功,js端可以收到true,反之则是false;

    要返回一个数字,可以用

    INT32_TO_NPVARIANT

    DOUBLE_TO_NPVARIANT

    调用方法和booll的一样。

    这里唯一有些区别的是String, 当需要返回字符串时,需要调用浏览器提供给插件的接口NPNetscapeFuncs,为字符串分配足够的内存空间,然后才能进行转换。

    extern NPNetscapeFuncs * browser;  //如果代码中没有定义过,需要在np_entry中先定义  

    const char * StringVariable = "1.0.0.1";//用这个值来充当函数返回值。如果是unicode,则需先转换成功ansi

    char* outStr = (char*)browser->memalloc(strlen(StringVariable)+1);

    if(!outStr) return false;

    strcpy(outStr, StringVariable);

    STRINGZ_TO_NPVARIANT(outStr, *result);

    这样在page的js代码就可以接收到传递的string value.

    至于,obj的返回方法还有待研究,欢迎拍砖。

  • 相关阅读:
    java-HTML&javaSkcript&CSS&jQuery&ajax
    HTML&javaSkcript&CSS&jQuery&ajax-XSS
    XSS-HTML&javaSkcript&CSS&jQuery&ajax-CSS
    XSS-HTML&javaSkcript&CSS&jQuery&ajax
    HTML&javaSkcript&CSS&jQuery&ajax-Css
    论坛IP地址追踪&路由器密码嗅探
    java ArrayList
    WireShark Flow capture analysis
    Software tips
    301. Remove Invalid Parentheses
  • 原文地址:https://www.cnblogs.com/xsgame/p/3088157.html
Copyright © 2020-2023  润新知