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

问题解决!!!

相关推荐
陈奕昆12 小时前
5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
华为·harmonyos
androidstarjack13 小时前
如何评价华为最新长焦专利技术?能否颠覆手机长焦摄影的目前限制?
华为·智能手机
程序员小刘14 小时前
如何优化React Native应用以适配HarmonyOS5?
javascript·react native·react.js·华为·harmonyos
anyup15 小时前
快崩溃了!华为应用商店已经 4 次驳回我的应用上线
前端·华为·uni-app
程序员小刘15 小时前
【HarmonyOS 5】拍摄美化开发实践介绍以及详细案例
华为·harmonyos
晓北斗NorSnow15 小时前
华为手机开机卡在Huawei界面不动怎么办?
华为·智能手机
Tianyanxiao21 小时前
华为×小鹏战略合作:破局智能驾驶深水区的商业逻辑深度解析
大数据·人工智能·经验分享·华为·金融·数据分析
程序员小刘1 天前
【HarmonyOS 5】运动健康开发实践介绍以及详细案例
华为·harmonyos
御承扬1 天前
从零开始开发纯血鸿蒙应用之网络检测
网络·华为·harmonyos