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
    );

问题解决!!!

相关推荐
萤火虫儿飞飞2 小时前
鸿蒙智选携手IAM进驻长隆熊猫村,为国宝打造智慧健康呼吸新空间
华为·harmonyos
御承扬3 小时前
HarmonyOS NEXT系列之定制化构建制品
华为·harmonyos
weixin_307779136 小时前
设计Mock华为昇腾GPU的MindSpore和CANN的库的流程与实现
c++·算法·华为·系统架构·gpu算力
挨踢攻城13 小时前
思科华为基础命令对比
华为·网络工程师·ccna·hcia·hcip·思科·厦门微思网络
熬了夜的程序员18 小时前
【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·华为od·华为·面试·golang
鸿蒙开发工程师—阿辉1 天前
HarmonyOS 应用拉起系列(一):应用与元服务互通方式
华为·harmonyos·arkts·鸿蒙
半夜偷删你代码2 天前
鸿蒙中相册权限弹窗
数码相机·华为·harmonyos
博睿谷IT99_2 天前
2025年华为HCIA-AI认证是否值得考?还是直接冲击HCIP?
人工智能·华为·ai·华为认证·职业规划
ajassi20002 天前
开源 Arkts 鸿蒙应用 开发(十二)传感器的使用
linux·华为·开源·harmonyos
小雨青年3 天前
HarmonyOS 生态与版本演进
华为·harmonyos