wkeOnDownload2与mbOnDownloadInBlinkThread

复制代码
背景:最近开始实习(打工)生涯。
需求:使用miniblink,显示网页,点击下载链接,可以实现下载。
寻求大佬帮助,得到了wke.h版本的下载相关的代码。

这里进行一些简单的分析:

实际语句:
wkeOnDownload2(webView, onDownloadCallback, nullptr);

通过调用该函数实现:

点击链接,实现下载功能。
函数原型:

复制代码
ITERATOR3(void,wkeOnDownload2, wkeWebView webView, wkeDownload2Callback callback, void\* param, "")
复制代码
这个是wke的导出函数。格式按照【返回类型】【函数名】【参数】来排列。

那么wkeDownload2Callback是?

cpp 复制代码
typedef wkeDownloadOpt(WKE_CALL_TYPE*wkeDownload2Callback)(
    wkeWebView webView, 
    void* param,
    size_t expectedContentLength,
    const char* url, 
    const char* mime, 
    const char* disposition, 
    wkeNetJob job, 
    wkeNetJobDataBind* dataBind);

wkeDownload2Callback是一个函数指针类型

指向的函数的类型形如:

cpp 复制代码
wkeDownloadOpt 函数名(
    wkeWebView webView, 
    void* param,
    size_t expectedContentLength,
    const char* url, 
    const char* mime, 
    const char* disposition, 
    wkeNetJob job, 
    wkeNetJobDataBind* dataBind);

返回值,函数名,参数列表都比较清晰了。
这是传递的实际形参的函数:

cpp 复制代码
static wkeDownloadOpt WKE_CALL_TYPE onDownloadCallback(wkeWebView webView,
    void* param,
    size_t expectedContentLength,
    const char* url,
    const char* mime,
    const char* disposition,
    wkeNetJob job,
    wkeNetJobDataBind* dataBind)
{
    //忽略
}

关于返回值类型:

cpp 复制代码
typedef enum _wkeDownloadOpt {
    kWkeDownloadOptCancel,
    kWkeDownloadOptCacheData,
} wkeDownloadOpt;

kWkeDownloadOptCancel:0

kWkeDownloadOptCacheData:1

类似bool

背景:上面的功能代码是wke.h版本的,我需要把它修改成mb.h版本的。

然后卡住了。

这是我报错的语句:

mbOnDownload(this->mbView, onDownloadCallback, nullptr);

函数原型:

ITERATOR3(void, mbOnDownload, mbWebView webView, mbDownloadCallback callback, void* param, "")

声明了一个函数指针类型:mbDownloadCallback

cpp 复制代码
typedef BOOL(MB_CALL_TYPE *mbDownloadCallback)(
mbWebView webView,
void* param,
mbWebFrameHandle frameId,
const char* url,
void* downloadJob);

所以该函数指针指向的函数应该形如:

cpp 复制代码
BOOL 函数名(
mbWebView webView, 
void* param, 
mbWebFrameHandle frameId, 
const char* url, 
void* downloadJob);

这是实际要调用的函数:

cpp 复制代码
static mbDownloadOpt MB_CALL_TYPE onDownloadCallback(mbWebView webView,
    void* param,
    size_t expectedContentLength,
    const char* url,
    const char* mime,
    const char* disposition,
    mbNetJob job,
    mbNetJobDataBind* dataBind);

分析可知,onDownloadCallback函数与mbDownloadCallback函数指针类型不匹配。

然后我发现我搞错了。。。

我应该调用这个函数:

cpp 复制代码
void mbOnDownloadInBlinkThread(
mbWebView webView, 
mbDownloadInBlinkThreadCallback callback, 
void* param)

mbDownloadInBlinkThreadCallback这个函数指针类型与onDownloadCallback相匹配

cpp 复制代码
typedef mbDownloadOpt(MB_CALL_TYPE* mbDownloadInBlinkThreadCallback)(
    mbWebView webView, 
    void* params,
    size_t expectedContentLength,
    const char* url, 
    const char* mime, 
    const char* disposition, 
    mbNetJob job, 
    mbNetJobDataBind* dataBind
    );

问题解决!!!

相关推荐
寂然如故5 小时前
鸿蒙操作系统(HarmonyOS)
华为·harmonyos
咔咔库奇5 小时前
HarmonyOS开发:传参方式
java·华为·harmonyos
李洋-蛟龙腾飞公司6 小时前
HarmonyOS NEXT 原生应用开发:社交聊天对话过程实现
华为·harmonyos
莳花微语10 小时前
Euler 21.10(华为欧拉)安装oracle19c-RAC
数据库·华为·oracle
Lu_Ca12 小时前
鸿蒙APP之从开发到发布的一点心得
华为·harmonyos·鸿蒙
文火冰糖的硅基工坊14 小时前
[创业之路-241]:《从偶然到必然-华为研发投资与管理实践》-2- IPD流程中的业务线、技术线、职能支撑线
华为·产品运营·需求分析·产品·创业
IT 古月方源14 小时前
华为设备的监控和管理
运维·服务器·网络·安全·网络安全·华为
轻口味16 小时前
【每日学点鸿蒙知识】so 库瘦身、IDE 内存配置、判断前后台呢
ide·华为·harmonyos
大土豆的bug记录18 小时前
Mac上鸿蒙配置HDC报错:zsh: command not found: hdc -v
macos·华为·harmonyos·arkts·鸿蒙·arkui
zhgjx_chen1 天前
ENSP综合实验(中小型网络)
服务器·网络·华为