zoukankan      html  css  js  c++  java
  • 两个模块的函数如何相互调用?

    两个模块函数交互
    如何调用其他模块的函数。

    一般如果自己是主要提供接口服务的,那么调用使用者模块的函数,叫回调。这样可以保证一定的逻辑顺序。比如A、B、C 3个模块是从高到低的逻辑。比如A调用B,B调用C,C回调B,B回调A。
    如果是A调用B,再说B调用A,体现不出逻辑是从A到B的。

    如果是从自己调用他人的角度,正常调用的角度。
    1、在知道函数的情况下,直接调用其他模块的函数。不利于移植,有耦合性,其他模块的函数修改了,我也要修改。
    2、用接口调用,用钩子函数来调用其他模块的函数,由其他模块负责函数指针的注册,不需要知道其他模块函数是什么。(钩子函数也就相当于知道了每一个函数名称而已)


    如果是从自己回调他人的角度。
    2、用接口来调用,双方定义一个函数接口,我在本地定义一个函数指针,对方需要注册该函数指针,那么我调用我自己的函数指针就相当于调用了别人的函数。
    别人来注册函数指针,我可以提供注册的接口。(也就是将别人的函数指针赋值给我的指针的接口)。别人不需要提供任何接口,只需要用我的注册函数,注册一下函数指针。
    如果是单个函数指针,可能还比较特殊;如果是多个函数,那就要用一个普通的函数指针数组,将其他指针强制转换为该指针。

    或者我调用别人提供的钩子函数。

    如下:用第一种方法就是自己定义一个函数指针,别人注册,我再调用自己的函数指针。
        用第二种方法就是我调用别人提供的钩子函数。我在本地什么都不保存。
    #if INSTALL_A
             Module_CbFunc_T        cbFunc = NULL;
            cbFunc = Module_CbFunc_Get(CB_SRV_CTRL_A);
            if (NULL != cbFunc)
            {
                cbFunc(arg1, arg2, arg3);
            }
    #elif INSTALL_B
            UINT32 ret = 0;
            othermodule_client_callback(CB_SRV_CTRLA,arg1, arg2, arg3);
    #endif

    被调用者来注册函数指针。这是很显然的。

  • 相关阅读:
    导出数据到Excel文件
    判断是否在某个时间段以内
    获取网络图片并保存到指定目录
    创建目录并且将数据写入txt文件、删除指定目录下的文件
    获取二维数组中指定字段的值,并且将值组成一维数组
    JS--获取月份天数
    php---邮件发送
    3D--魔方
    leetcode每日一题之10.分割回文串 II
    leetcode每日一题之9.最长递增子序列
  • 原文地址:https://www.cnblogs.com/elseliving/p/7922894.html
Copyright © 2011-2022 走看看