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

问题解决!!!

相关推荐
特立独行的猫a38 分钟前
强大的鸿蒙HarmonyOS网络调试工具PageSpy 介绍及使用
网络·华为·harmonyos
RUNNING123!6 小时前
eNSP华为无线网测试卷:AC+AP,旁挂+直连
运维·网络·华为
qq_386322696 小时前
华为网路设备学习-33(BGP协议 八)BGP路由 选路规则
学习·华为
天天开心a18 小时前
华为HCIP-Datacom-Core Technology H12-831 书籍目录
网络·华为
爱笑的眼睛111 天前
HarmonyOS 应用开发深度解析:ArkTS 声明式 UI 与状态管理最佳实践
华为·harmonyos
damo王1 天前
鸿蒙(HarmonyOS) 历史
华为·harmonyos
爱笑的眼睛111 天前
HarmonyOS声明式UI开发:深入ArkUI与状态管理实践
华为·harmonyos
爱笑的眼睛111 天前
HarmonyOS 应用开发进阶:深入 Stage 模型与 ArkUI 声明式开发实践
华为·harmonyos
2501_919749031 天前
鸿蒙:更改状态栏、导航栏颜色
华为·harmonyos
2501_919749031 天前
鸿蒙:@Builder 和 @BuilderParam正确使用方法
华为·harmonyos