• wkeOnDownload2与mbOnDownloadInBlinkThread


    背景:最近开始实习(打工)生涯。
    需求:使用miniblink,显示网页,点击下载链接,可以实现下载。
    寻求大佬帮助,得到了wke.h版本的下载相关的代码。
    
    这里进行一些简单的分析:
    
    实际语句:
    wkeOnDownload2(webView, onDownloadCallback, nullptr);

    通过调用该函数实现:

    点击链接,实现下载功能。

    函数原型:

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

    那么wkeDownload2Callback是?

    1. typedef wkeDownloadOpt(WKE_CALL_TYPE*wkeDownload2Callback)(
    2. wkeWebView webView,
    3. void* param,
    4. size_t expectedContentLength,
    5. const char* url,
    6. const char* mime,
    7. const char* disposition,
    8. wkeNetJob job,
    9. wkeNetJobDataBind* dataBind);

    wkeDownload2Callback是一个函数指针类型

    指向的函数的类型形如:

    1. wkeDownloadOpt 函数名(
    2. wkeWebView webView,
    3. void* param,
    4. size_t expectedContentLength,
    5. const char* url,
    6. const char* mime,
    7. const char* disposition,
    8. wkeNetJob job,
    9. wkeNetJobDataBind* dataBind);

    返回值,函数名,参数列表都比较清晰了。

    这是传递的实际形参的函数:

    1. static wkeDownloadOpt WKE_CALL_TYPE onDownloadCallback(wkeWebView webView,
    2. void* param,
    3. size_t expectedContentLength,
    4. const char* url,
    5. const char* mime,
    6. const char* disposition,
    7. wkeNetJob job,
    8. wkeNetJobDataBind* dataBind)
    9. {
    10. //忽略
    11. }

    关于返回值类型: 

    1. typedef enum _wkeDownloadOpt {
    2. kWkeDownloadOptCancel,
    3. kWkeDownloadOptCacheData,
    4. } 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

    1. typedef BOOL(MB_CALL_TYPE *mbDownloadCallback)(
    2. mbWebView webView,
    3. void* param,
    4. mbWebFrameHandle frameId,
    5. const char* url,
    6. void* downloadJob);

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

    1. BOOL 函数名(
    2. mbWebView webView,
    3. void* param,
    4. mbWebFrameHandle frameId,
    5. const char* url,
    6. void* downloadJob);

    这是实际要调用的函数:

    1. static mbDownloadOpt MB_CALL_TYPE onDownloadCallback(mbWebView webView,
    2. void* param,
    3. size_t expectedContentLength,
    4. const char* url,
    5. const char* mime,
    6. const char* disposition,
    7. mbNetJob job,
    8. mbNetJobDataBind* dataBind);

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

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

    我应该调用这个函数:

    1. void mbOnDownloadInBlinkThread(
    2. mbWebView webView,
    3. mbDownloadInBlinkThreadCallback callback,
    4. void* param)

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

    1. typedef mbDownloadOpt(MB_CALL_TYPE* mbDownloadInBlinkThreadCallback)(
    2. mbWebView webView,
    3. void* params,
    4. size_t expectedContentLength,
    5. const char* url,
    6. const char* mime,
    7. const char* disposition,
    8. mbNetJob job,
    9. mbNetJobDataBind* dataBind
    10. );

    问题解决!!! 


     

  • 相关阅读:
    南昌某高校遭黑客攻击被罚款,网络安全工作需真正重视起来!
    Makefile Npm
    C/C++内存对齐
    node项目调试
    selenium模拟登录无反应
    这个中秋最潮酷玩法,必须mark!
    java 实习面经 —— 含大厂
    Android Dialog相关设置
    五台大数据集群生产节点安装规划
    好心情:哪些情况需要送医至精神科急诊?
  • 原文地址:https://blog.csdn.net/weixin_51883798/article/details/132890415