npvlc开发:NPVariant 提取出const char*部分数据的方法

来源:互联网 发布:c4.5算法python实现 编辑:程序博客网 时间:2024/05/21 20:24

最近在用NPAPI开发基于vlc的Firefox插件,基于开源项目npvlc进行定制修改,在这过程中遇到一些问题记录一下。


问题:从NPVariant 类型参数 提取出stringValue,然后从stringValue提取出 const char*部分数据


方法如下:

首先看 NPVariant定义:

typedef struct _NPVariant {    NPVariantType type;    union {        bool boolValue;        int32_t intValue;        double doubleValue;        NPString stringValue;        NPObject *objectValue;    } value;} NPVariant;


NPVariant提供NPVARIANT_TO_STRING(args[0]), NPVARIANT_TO_OBJECT(args[0]),                                NPVARIANT_TO_BOOLEAN(args[0])   等操作【args为:NPVariant *args】,这些操作定义如下:

#define NPVARIANT_IS_VOID(_v)    ((_v).type == NPVariantType_Void)#define NPVARIANT_IS_NULL(_v)    ((_v).type == NPVariantType_Null)#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)#define NPVARIANT_IS_INT32(_v)   ((_v).type == NPVariantType_Int32)#define NPVARIANT_IS_DOUBLE(_v)  ((_v).type == NPVariantType_Double)#define NPVARIANT_IS_STRING(_v)  ((_v).type == NPVariantType_String)#define NPVARIANT_IS_OBJECT(_v)  ((_v).type == NPVariantType_Object)#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)#define NPVARIANT_TO_INT32(_v)   ((_v).value.intValue)#define NPVARIANT_TO_DOUBLE(_v)  ((_v).value.doubleValue)#define NPVARIANT_TO_STRING(_v)  ((_v).value.stringValue)#define NPVARIANT_TO_OBJECT(_v)  ((_v).value.objectValue)

而NPString定义如下:

typedef struct _NPString {    const NPUTF8 *UTF8Characters;    uint32_t UTF8Length;} NPString;


所以,很简单:从NPVariant 类型参数 提取出 const char*部分数据的方法是:

const char* outString = (NPVARIANT_TO_STRING(args[0])).UTF8Characters;

等价于:
const char* outString = args[0].value.stringValue.UTF8Characters;

同理


int outLength =  (NPVARIANT_TO_STRING(args[0])).UTF8Length;
等价于:
int outLength= args[0].value.stringValue.UTF8Length;


原创粉丝点击