百宝云COM组件操作教程

第二章专题解析第五节:COM组件

      百宝云提供的COM插件里,有4大类函数,分别如下:

     ① 公共接口类:用来与百宝云进行通信

     ② 效验算法类用来效验字符串、文件合法性

     ③ 加解密用来加解密字符串、文件。

     ④ JSON类用来解析或者构建JSON字符串。

 

    这里我们主要来讲讲与百宝云默认事件相关的接口,其他的接口,大家可以去看看百宝云的帮助文档,文档里的描述比较详细,而且都有相应的示例代码。

 

   不过我们在调用插件里的函数之前,必须要先注册插件,否则调用函数会失败。

  在TC里,我们可以把插件加入到项目的资源目录里(导入资源、手动拷贝到资源目录),这样之后,我们只需要在TC的界面初始化事件里加入插件注册代码即可。代码如下

 功能 bbycom_初始化()
    //这里添加你要执行的代码
    变量 ret=是否注册("bby.soft")
如果(!ret)
ret=注册插件("rc:t_baibaoyun.dll",真)
        如果(!ret)
            消息框("插件注册失败")
退出()
        结束        
      结束
bby = 插件("bby.soft")    
结束


代码中的bby是一个全局变量,用来保存插件的对象。

 

 

   5.1 login接口

    当程序调用插件中的login函数时,百宝云就会触发_userlogin事件。

    注意调用此函数之前,需要先调用插件里的reg函数,只有在reg成功的情况下,login才会调用成功,并且触发对应的事件。

    login函数原型如下:

   login (custom_char,arg,msgbuff) 

 

   对应的百宝云事件原型如下

_userlogin(token,arg1,arg2,&out_ret)

 

   这里类讲下参数的对应关系:

_userlogin的token参数对应reg函数的token值。

_userlogin的arg1参数对应login函数的custom_char值。

_userlogin的arg2参数对应login函数的arg值。

_userlogin的out_ret参数对应login函数的msgbuff值。

 

   注意同一个百宝云应用中,custom_char值必须是唯一的,否则会踢掉原先用custom_char已经登录的用户从而导致无法收到百宝云推送过来的消息。

 

   百宝云测试代码

 

  function _userlogin(token,arg1,arg2,&out_ret) 
    out_ret="来自com插件的login函数的请求"
    return true
end

 

客户端的测试代码(TC代码)

功能 login登录测试()
    变量 result
    result = bby.reg("abin","aac5ddb832bbca6d2db00a7557152d5c")
    如果(result == 0)
        变量 ret = bby.login("user","pwd",result)
        如果(ret == 0)
            调试输出("登录成功") 
            返回 真
        否则
            调试输出("login登录失败,错误代码:"&ret)
            返回 假
        结束    
    否则
        调试输出("注册失败,错误代码:"&result)
        返回 假
    结束    
结束


 

    5.2 pushconnect接口

    当程序调用插件中的pushconnect函数时,百宝云就会触发_userpush 事件。

    注意调用此函数之前,需要先调用插件里的reg函数,只有在reg成功的情况下,pushconnect才会调用成功,并且触发对应的事件。

    pushconnect函数原型如下:

    pushconnect(custom_char,arg,msgbuff) 

 

对应的百宝云事件原型如下:

_userpush(token,arg1,arg2,&out_ret)

 

这里类讲下参数的对应关系:

_userpush的token参数对应reg函数的token值。

_userpush的arg1参数对应pushconnect函数的custom_char值。

_userpush的arg2参数对应pushconnect函数的arg值。

_userpush的out_ret参数对应pushconnect函数的msgbuff值。

 

注意同一个custom_char,在同一个百宝云应用里可以多次使用,不会出现踢掉原先登录情况。

 

百宝云的测试代码如下:

function _userpush(token,arg1,arg2,&out_ret)
    out_ret="来自com插件的pushconnect函数的请求"
    return true
end


 

TC中的测试代码如下:

功能 push登录测试()
    变量 result
    result = bby.reg("abin","aac5ddb832bbca6d2db00a7557152d5c")
    如果(result == 0)
        变量 ret = bby.pushconnect("user","pwd",result)
        如果(ret == 0)
            调试输出("登录成功") 
            返回 真
        否则
            调试输出("push登录失败,错误代码:"&ret)
            返回 假
        结束    
    否则
        调试输出("注册失败,错误代码:"&result)
        返回 假
    结束    
结束
 


 

   5.3 commoninterface接口

    当程序调用插件中的commoninterface函数时,百宝云就会触发_commoninterface 事件。

    注意调用此函数之前,需要先调用插件里的reg函数,只有在reg成功的情况下,commoninterface才会调用成功,并且触发对应的事件。

commoninterface函数原型如下:

commoninterface(arg,retbuff) 

 

对应的百宝云事件原型如下:

_commoninterface(token,arg)

 

这里类讲下参数的对应关系:

_commoninterface的token参数对应reg函数的token值。

_commoninterface的arg参数对应commoninterface函数的arg值。

commoninterface的retbuff参数则是_commoninterface事件return

 

百宝云里的事件代码:

function _commoninterface(token,arg) 
    return "来自com插件的请求请求"
end


 

TC中的测试代码如下:

功能 push登录测试()
    变量 result
    result = bby.reg("abin","aac5ddb832bbca6d2db00a7557152d5c")
    如果(result == 0)
        变量 ret = bby.commoninterface("test",result)
        如果(ret == 0)
            调试输出("登录成功") 
            返回 真
        否则
            调试输出("commoninterface失败,错误代码:"&ret)
            返回 假
        结束    
    否则
        调试输出("注册失败,错误代码:"&result)
        返回 假
    结束    
结束
 


   5.4 接收百宝云推送数据的函数

   插件里提供了几个回调函数,用来接收百宝云推送的内容,这样我们就可以做很多事情了,例如:登录的用户群发更新软件通知、功能变更通知;对单个用户发送节日问候、警告通知等等。

 

百宝云里提供了几个命令用来推送内容的,命令如下:

pushtextmsg  推送文本消息到连接用户

pushtextmsgall  推送文本消息到所有连接用户

logintextmsg  推送消息到登陆用户

logintextmsgex  推送消息到登陆用户扩展

 

push类的推送数据

实现推送数据功能的流程如下:

1) 成功注册插件

2) 创建插件对象

3) 成功调用插件的reg方法

4) 成功调用插件的pushconnect方法

5) 插件的回调函数关联一个本地的回调函数。

6) 百宝云里通过pushtextmsg 、pushtextmsgal对登录的用户推送内容。

 

TC端的代码如下(只有主要代码

功能 bbycom_初始化()
    //这里添加你要执行的代码
    变量 ret=是否注册("bby.soft")
    如果(!ret)
        ret=注册插件("rc:t_baibaoyun.dll",真)
        如果(!ret)
            消息框("插件注册失败")
            退出()
        结束        
    结束
    


    bby = 插件("bby.soft")
    ret = bby.reg("abin","fb0093726c769c715c038450a52442a8")
    如果(ret != 0)
        消息框("向百宝云注册失败,失败原因:" & bby.TranslateErr(ret))
        退出()
    结束
结束
 


功能 login_点击()
    <span style="background-color: rgb(255, 255, 51);">//这里添加你要执行的代码
    变量 result
    变量 ret = bby.pushconnect("user2","pwd",result)
    如果(ret == 0)        
        变量 login_callback_handle = 回调函数申请("login_callbackpush","bby_callback")
        如果(login_callback_handle !=0)
            bby.msgcallback_push(login_callback_handle)
            调试输出("设置push回调函数成功")
        否则
            消息框("设置回调函数失败,推送消息将无法接收!")
        结束
        调试输出(result) 
    否则
        调试输出(ret)</span>
    结束
    
结束


 

<span style="background-color: rgb(255, 255, 51);">功能 login_callbackpush(type,arg)
    traceprint("触发回调函数")
变量 content = 当前时间()&"\r\npush类型:"&type &"\r\n"&"push内容:"&地址取值(arg,"wchar *")
    traceprint(content)
    消息框(content)
结束</span>


黄色背景的代码就是设置回调函数并接收百宝云推送内容关键代码段。

 

代码演示图:

百宝云端效果

 


TC端的效果

 

 

login类的推送数据

实现推送数据功能的流程如下:

1) 成功注册插件

2) 创建插件对象

3) 成功调用插件的reg方法

4) 成功调用插件的login方法

5) 插件的回调函数关联一个本地的回调函数。

6) 百宝云里通过logintextmsg、logintextmsgex对登录的用户推送内容。

 

TC端的代码如下(只有主要代码

功能 bbycom_初始化()
    //这里添加你要执行的代码
    变量 ret=是否注册("bby.soft")
    如果(!ret)
        ret=注册插件("rc:t_baibaoyun.dll",真)
        如果(!ret)
            消息框("插件注册失败")
            退出()
        结束        
    结束


    

    

bby = 插件("bby.soft")
    ret = bby.reg("abin","fb0093726c769c715c038450a52442a8")
    如果(ret != 0)
        消息框("向百宝云注册失败,失败原因:" & bby.TranslateErr(ret))
        退出()
    结束
结束

 
功能 login_点击()
    //这里添加你要执行的代码
   <span style="background-color: rgb(255, 255, 51);"> 变量 result
    变量 ret = bby.login("user","pwd",result)
    如果(ret == 0)        
        变量 login_callback_handle = 回调函数申请("login_callbacklogin","bby_callback")
        如果(login_callback_handle !=0)
            bby.msgcallback_login(login_callback_handle)
            调试输出("设置login回调函数成功")
        否则
            消息框("设置回调函数失败,推送消息将无法接收!")
        结束
        调试输出(result) </span>
    否则
        调试输出(ret)
    结束
    
结束


 

<span style="background-color: rgb(255, 255, 51);">功能 login_callbacklogin(type,arg)
    traceprint("触发回调函数")
变量 content = 当前时间()&"\r\nlogin类型:"&type &"\r\n"&"login内容:"&地址取值(arg,"wchar *")
traceprint(content)
    消息框(content)
结束</span>


黄色背景的代码就是设置回调函数并接收百宝云推送内容关键代码段。

 

百宝云端的代码:

百宝云主要是实现了_userlogin事件之后在主按钮里调用命令logintextmsg推送内容。

 

// 程序入口功能
功能 _initial()
    发送文本消息("初始化接口")
结束
// 按下主按钮触发的功能方法
功能 _mainbutton()
    发送文本消息("开始推送内容")
    if(logintextmsg("user","HI,你好"))
        sendtextmsg("login推送内容成功")
    else
        sendtextmsg("login推送内容失败")
    end
结束
 


功能 _userlogin(token,arg1,arg2,&out_ret)
    sendtextmsg("login name="&arg1 & " pwd=" & arg2)
    out_ret="来自com插件的login函数的请求"
    return true
结束
 


演示图

百宝云APP图

 

TC端的图:

 

 

 

注意

TC代码中,因为申请的回调函数都是bby_callback,所以login与push的推送在本地只有最后一次申请的回调函数有效。

但是在C++里,因为回调函数可以自己定义,所以就不存在这个问题。

 

   5.5 效验与加解密类接口

   COM插件里的效验接口、加解密接口与百宝云里提供的效验接口、加解密函数是对应的,可以通用的。现在通过一个示例来验证下如下的需求:

在COM里使用AES加密算法aesencrypt加密一个字符串”abcd”,之后把密文通过commoninterface发送给百宝云进行解密,得到数据。

TC端的代码

功能 test() 
    变量 bby=插件("bby.soft") 
    变量 sourcestr = "abcd",key="bby"
    变量 result = bby.aesencrypt(sourcestr,key) 
    变量 retbuff = ""
    如果(bby.reg("abin","aac5ddb832bbca6d2db00a7557152d5c") == 0)
        变量 ret = bby.commoninterface(result,retbuff)
        如果(ret == 0)
            消息框(retbuff)
        否则
            消息框("commoninterface失败")
        结束
    否则
        消息框("reg失败")
    结束
结束
 


百宝云端的代码

功能 _commoninterface(token,arg)
    变量 ret = aesdecrypt(arg,"bby")
    返回 "百宝云解密的内容是:"&ret
结束


 

 

 

  5.6 Json操作接口

   5.6.1 利用com构建json字符串

TC代码如下

变量 pJson = bby.jsoncreate() 
    bby.jsonpushstring(pJson,"str","用户向作者反馈信息") 
    bby.jsonpushstring(pJson,"type","sendApp") 
    变量 conent = bby.jsontostring(pJson) 
    bby.jsonfree(pJson) 
    变量 retstr 
    bby.commoninterface(conent,retstr) 
消息框(retstr)


 

 

 百宝云代码如下

功能 _commoninterface(token,arg)
    发送文本消息("接收到的内容是:"&arg)
    变量 ret = json转数组(arg)
    发送文本消息("str = "&ret["str"])
    发送文本消息("type = "&ret["type"])
    返回 "解析成功"
结束


 

5.6.2 解析JSON字符串

百宝云代码

功能 _commoninterface(token,arg)
    变量 arr = 数组()
    arr["zhangsan"] = "学生"
    arr["lisi"] = "工程师"
    返回 数组转json(arr)
结束


 

TC的代码

功能 解析JSON字符串(json字符串)
    变量 a = bby.jsonparse( json字符串 )
    变量 size = bby.jsongetsize(a)
    变量 key,value
    遍历(变量 i = 0; i < size; i++)
        bby.jsongetat(a,i,value,key)
        调试输出(i&" :key="&key&"  value="&value)
    结束
结束


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
com自学视频教程,绝对可以下载,共8集。主要讲解com组件相关的知识点以及com如何开发。COM接口与QueryInterface 内容提要: 1、现实中的组件与接口 2、把现实中的思想融入到软件中 3、C++程序中的组件与接口 4、COM组件COM接口 5、QueryInterface函数,HRESULT类型,IID类型,数据类型转换 计数引用AddRef与Release 内容提要: 1、内存资源何时释放 2、引用计数的原理 3、AddRef与Release的实现与使用 4、引用计数的优化 IDispatch接口与Variant类型 内容提要: 1、IDispatch的简介与作用 2、常用的COM数据类型 3、COM数据类型的转换 4、VARIANT类型的派生类 五:《COM实用入门教程》第四讲:SimpleObject的创建与调用 内容提要: 1、用ATL制作简单对象(Simple Object) 2、在网页中测试简单对象 3、在MFC中测试简单对象 4、在C#中测试简单对象 COM组件注册与智能指针 内容提要: 1、COM组件的注册 2、智能指针的简介 3、智能指针的使用 4、智能指针与COM接口指针的比较 5、智能指针的注意点 七:《COM实用入门教程》第六讲:复合控件与CComBSTR 内容提要: 1、复合控件的创建 2、复合控件的属性 3、BSTR的包装类 4、复合控件的方法 5、复合控件的事件 6、在网页中测试复合控件的属性、方法、事件 7、在MFC中测试复合控件的属性、方法、事件 8、在C#中测试复合控件的属性、方法、事件 简单对象的方法与事件 内容提要: 1、为简单对象添加方法与事件 2、在MFC中实现事件接收器 3、在MFC中测试简单对象的方法与事件 4、测试例子的改进
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值