精华内容
下载资源
问答
  • javascript中的隐式调用

    2020-11-30 10:48:26
    不知道用隐式调用来形容是否确切,其行为总是隐藏在背后,时不时出来露脸一下,作用貌似不大,但是了解一下还是有用处的,保不准在你的使用下大有作为。 所谓的隐式调用简单来说就是自动调用一些方法,而这些方法像...
  • 显式调用与隐式调用

    万次阅读 2018-09-27 12:46:10
    前面课程已经多次演示了显式调用和隐式调用,本节我们集中对这两种调用方式进行讲解。 1、显式调用 我们通过Intent调用组件时,可以直接指定组件类,这种方式称为显式调用,下面给出一段代码,显式调用一个...

    前面课程已经多次演示了显式调用和隐式调用,本节我们集中对这两种调用方式进行讲解。

    1、显式调用

    我们通过Intent调用组件时,可以直接指定组件类,这种方式称为显式调用,下面给出一段代码,显式调用一个Activity

    Intent intent = new Intent(LoginActivity.this, HomeActivity.class);

    startActivity(intent);

    显式调用通常用于访问应用程序本身的组件,但也不尽其然,也就是说一个应用程序同样可以直接指定另一个应用程序的组件。下面先给出一个跨应用程序访问Activity的样例代码。

    Intent intent = new Intent();

    intent.setClassName("com.practise.salary.hello","com.practise.salary.hello.ViewCallActivity");

    startActivity(intent);

           注意:ViewCallActivity必须声明属性android:exported="true"(该属性将在后面的课程详细介绍),如下图所示:

    在Android中,包名称唯一标示一个应用,所以我们可以在Intent中指定要调用的包名称和类名称来启动其他应用中的组件。除了指定包名名外,我们还可以通过createPackageContext来创建包名对应的Context,完成对其他应用程序组件的调用。

    代码如下:

    try {

        Intent intent = new Intent();

        Context viewContext = createPackageContext("com.practise.salary.hello", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);

        intent.setClassName(viewContext, "com.practise.salary.hello.ViewCallActivity");

        startActivity(intent);

    }catch (PackageManager.NameNotFoundException exp){

        Log.v(this.getClass().getName(), "异常", exp);

    }

    createPackageContext方法定义在ContextWrapper中,ContextWrapper是Context的一个子类。Activity与ContextWrapper之间的关系如下图所示:

    createPackageContext的方法签名如下所示:

    Context createPackageContext (String packageName, int flags)

    其中:

    1. packageName:包名,要得到Context的包名
    2. flags:标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。

    除了上述两种外,我们观察CompomentName构造函数,会发现,也可以通过ComponentName对象实现对其他应用程序组件的调用

    Intent intent = new Intent();

    intent.setComponent(new ComponentName("com.practise.salary.hello", "com.practise.salary.hello.FirstActivity"));

    startActivity(intent);

    2、隐式调用

    我们可以通过指定Action,Category,Data,由系统根据条件,过滤选择满足条件的组件进行调用,这种调用方式称为隐式调用,下面给出隐式调用Activity的代码。

    Intent intent = new Intent();

    intent.setAction("com.practise.salary.hello.CALL");

    intent.addCategory("com.practise.salary.hell.VIEW");

    startActivity(intent);

           我们可以对某个Activity配置过滤条件,系统会调用对应的Activity。配置如下图所示:

    我们通常通过隐式调用,调用系统Activity,例如下面代码,调用发送短信的Activity。

    Intent intent = new Intent();

    intent.setAction(Intent.ACTION_SENDTO);

    intent.setData(Uri.parse("smsto:10086"));

    intent.putExtra("sms_body","The SMS text");

    startActivity(intent);

    关于系统调用,后面会有专门的章节进行讲解,此处只是做一个介绍。

    (张伟:2018年9月27日)

    (转载时请注明来源)

    展开全文
  • 显示调用与隐式调用

    千次阅读 2019-01-23 15:45:36
    有一些函数,你主动的调用了,就是显示调用。 如果你没有调用,但是这个函数确实被调用了,那它就是被隐式的调用了。...一般来说,强制转换是隐式调用了构造函数。 析构函数是隐式调用的,不需要我们主动调用。 ...

    有一些函数,你主动的调用了,就是显示调用。
    如果你没有调用,但是这个函数确实被调用了,那它就是被隐式的调用了。
    一般来说,强制转换是隐式调用了构造函数。
    析构函数是隐式调用的,不需要我们主动调用。

    展开全文
  • 隐式调用和显式调用

    2020-09-15 09:26:16
    接着会调用父类的一个或多个构造器执行初始化,这个调用即可通过 super 显示调用,也可隐式调用。 假设有如下继承关系: Object—>parent—>mid—>sub import java.util.Arrays; public class test { ...

    一、结论

    当调用某个类的构造器来创建Java对象时,系统总会先调用父类的非静态初始化块进行初始化,这个调用是隐式的。接着会调用父类的一个或多个构造器执行初始化,这个调用即可通过 super 显示调用,也可隐式调用(当没用显示调用时,就会使用隐式调用无参数构造函数)。

    假设有如下继承关系:
    Object—>parent—>mid—>sub

    import java.util.Arrays;
    
    public class test {
        public static void main(String[] args) {
            new Sub(111);
    
        }
    
    }
     class parent{
        public parent(){
            System.out.println("parent 无参数构造器");
    
        }
        public  parent(String name){
    //使用this调用另一个无参数的构造器
            System.out.println("parent 带参数构造器:"+name);
    
        }
         {
             System.out.println("parent 非静态初始化");
         }
    }
    class mid extends  parent{
        public mid(){
            System.out.println("mid 无参数构造器");
    
        }
        public  mid(String name){
            super(name);//显式调用父类带一个参数的构造器
            System.out.println("mid 带参数构造器:"+name);
    
        }
        public  mid(String name,int age){
            this(name);
    
            System.out.println("mid 带两个参数构造器:"+age);
    
        }
        {
            System.out.println("mid 非静态初始化");
        }
    }
    class Sub extends mid {
    
        public Sub() {
    
            System.out.println("Sub 类无参构造器");
        }
    
        public Sub(int a) {
            this();
            System.out.println("Sub 类带一个参数构造器, a: " + a);
            System.out.println();
        }
    
        {
            System.out.println("Sub 类非静态初始化块");
        }
    
    
    }
    

    则构造器的执行顺序为:
    1、执行Object类的非静态初始化块;
    2、隐式或显式调用Object类的一个或多个构造器执行初始化;
    3、执行Parent累的非静态初始化块;
    4、隐式或显式调用Parent类的一个或多个构造器执行初始化;
    5、执行Mid累的非静态初始化块;
    6、隐式或显式调用Mid类的一个或多个构造器执行初始化;
    7、执行Sub累的非静态初始化块;
    8、隐式或显式调用Sub类的一个或多个构造器执行初始化;

    因此执行顺序为:
    1、父类的非静态初始化块,构造器;
    2、本类的非静态初始化块,构造器。

    注:

    1. super用于显示调用父类的构造器,this用于显示调用本类中另一个重载的构造器;
    2. super 调用和this 调用都只能在构造器中使用,并且都必须作为构造器的第一行代码;
    3. super 调用和 this 调用最多只能使用其中之一, 而且最多只能调用一次。
      https://blog.csdn.net/u012099869/article/details/51027236
    展开全文
  • 隐式调用dll和显式调用dll,并做了demo在同一个solution下编译就可以尝试,通过宏来控制隐式和显示调用。显示调用即使dll改名依然能够获取函数地址,通过函数指针来使用。
  • Qt调用dll的隐式调用

    千次阅读 2018-11-09 12:50:36
    Qt调用dll的隐式调用 一、前言: Qt调用dll的例子,在网上找了很多个,始终由于自己对Qt不熟的原因总是 失败(本人一直使用vs开发,由于工程上要提供sdk给Qt工程师调用导致各种问题),经过一番折腾终于可以实现...

    一、前言:

    Qt调用dll的例子,在网上找了很多个,始终由于自己对Qt不熟的原因总是 失败(本人一直使用vs开发,由于工程上要提供sdk给Qt工程师调用导致各种问题),经过一番折腾终于可以实现其中的一种调用方式:隐式调用。
    当然,Qt调用dll的方法好多种,然后毕竟不是专门搞Qt的,所以没有专门归纳各种调用方式,紧紧调用成功一种,记录下来。

    二、Qt调用Qt写的dll

    1、建c++库生成dll、lib
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    把所有打钩的去掉,然后一直下一步,完成。
    在这里插入图片描述
    在这里插入图片描述
    编写了两个函数,test01 和 getString(这个函数故意设置,请看后面),功能很简单
    2、新建工程包含头文件.h
    在这里插入图片描述
    在这里插入图片描述
    3、配置库lib
    在这里插入图片描述
    4、将dll放到exe目录
    在这里插入图片描述
    5、写客户端代码

    int main(int argc, char *argv[])
    {
        SecondDlltest test;
        test.test01();
    
        unsigned char  str[]="hello";
    
        std::string temp="hello";
        std::string text=test.getString(temp);
        qDebug()<<text.c_str()<<endl;
    }
    

    6、运行看效果
    在这里插入图片描述

    三、Qt调用vs写的dll(为何要单独讲?因为其中有坑,后面补上)

    过程一样:
    1、生成dll、lib,此时函数和Qt的类是一样的功能
    在这里插入图片描述
    在这里插入图片描述
    2、添加.h、配置lib、dll放到exe目录下(过程一样)
    3、客户端代码
    在这里插入图片描述
    4、运行看效果
    在这里插入图片描述
    请认真看效果,test01已经调用成功,而getString导致了bug,程序崩溃,如何补救?下一节讲解

    四、总结分析

    Qt调用Qt自身的dll,在一切环境下都能正常运行,vs工厂调用vs的dll也能正常调用,然而当跨环境时候,Qt调用vs的dll就出现了问题,原因是:字符集编码引起,QT默认是UTF-8字符集,而vs默认的是Unicode字符集,用c++同一个string写进去的时候(exe写内存)和读取时候(dll读取)的格式不一样,导致乱码了(附上一张内存图,exe中为hello,而dll中显示的是乱码)
    在这里插入图片描述
    在这里插入图片描述
    然而此时程序已经崩溃,不能继续运行了。
    详细分析后,过程应该是这样的:
    1、dll用vs的Unicode编译,认为参数安装Unicode格式读取
    2、Qt按照UTF-8格式将hello,写入参数当中
    3、参数在内存是utf格式的串
    4、dll拿到这块内存,用Unicode格式翻译
    5、翻译出错,内存数据乱码,程序崩溃
    怎么避免这个问题,下一节讲解

    展开全文
  • 动态链接库的隐式调用 动态链接库的隐式调用 动态链接库的隐式调用
  • 隐式调用DLL库实例

    2010-01-26 11:01:31
    在VC6.0中,隐式调用DLL例子。 在VC6.0中,隐式调用DLL例子。 在VC6.0中,隐式调用DLL例子。
  • activity的隐式调用

    2018-02-28 09:56:12
    启动activity可以是显示调用或者隐式调用,显示调用需要明确的指定被启动对象的组件信息,而隐式调用需要intent能够匹配目标组件的intentFilter中所设置的过滤信息,如果不匹配,则无法启动目标activity。...
  • 1、显示调用:指名了service所在的包名和类名 2、隐式调用:通过action和app的包名指定-->服务运行所在app的包名 虽然服务在ATMSLibary中创建,但是运行在包名为geniatech.com.atmsdemo app中...不同app,只能隐式调用
  • linux 动态库 显式调用 与 隐式调用 https://blog.csdn.net/wlsfling/article/details/68490578 linux下动态链接库(.so)的显式调用和隐式调用 ...
  • 显示调用和隐式调用

    千次阅读 2014-08-18 10:41:19
    首先动态库分为显示调用和隐式调用,这个的区别呢,显示调用需要Loadlibray和freelibrary,隐式调用不需要Loadlibrary和freelibrary,只是需要导入相关的lib文件,因此,如果动态库下面包含有静态对象的话,显示调用...
  • FTP下载-支持SSL&TSL;隐式调用,内涵FTP下载代码及相关dll工具文件。
  • 体系结构 经典KWIC问题 隐式调用风格 实现上没有使用Java自带的观察者,自身实现了较为简单的EventManager 附带逻辑视图、开发视图
  • 由于一个程序使用了分包,导致其他应用调用该程序的Service的时候无法直接通过包名来调用这个程序的服务,可以通过以下代码来隐式调用服务 1.定义Service <service android:name=...
  • Dll文件调用方式分为显式调用和隐式调用,在这里选择隐式调用的方式。 连接地址:http://www.360doc.com/content/18/0911/17/59608061_785737751.shtml
  • 一、隐式调用编译程序时需要头文件、lib文件,运行时需要DLL文件,并且运行过程中DLL文件一直被占用。#pragma comment(lib, "Common.lib")二、显式调用编译时什么都不需要,在需要使用DLL中的函数时,通过...
  • 下面是关于父类构造方法调用的实验:当父类子类都没有定义构造方法时,系统为父类、子类提供一个无参构造方法,并在子类中隐式调用父类无参构造方法:class Father {} class Son extends Father {}我们可以自己写...
  • 显式调用和隐式调用1.1 显示调用1.2 隐式调用1.2.1 关于android.intent.category.DEFAULT1.2.2系统自带的一些隐式调用的Activity1.2.3 为什么需要隐式调用Activity,隐式调用Activity的应用场景2. Intent Filter...
  • 动态链接库隐式调用

    2016-03-24 14:13:30
    动态链接库的隐式调用。最近才接触MFC编程,遇到dll 的创建和使用,研究了几天,把dll的创建和使用经验做了个简单的样例,方便新手学习
  • 用这种方法来隐式调用dll,近准备弄个项目,程序需从N个DLL中调用一个或几个,在DLL处理完数据后要通知主程序。程序功能很简单,但因为N不确定性,并且可能随时可能增加,所以只能用CreateObject隐式调用DLL,在网上...
  • Windows10 64位系统,VS2013 编程平台...工程二为调用DLL的方法,分为隐式调用和显式调用。两个工程都是控制台应用程序consoleapplication。 对应的文章为 https://blog.csdn.net/u012210613/article/details/88904841
  • C++函数模板可以显示调用与可以隐式调用 首先定义函数模板: template <class T> inline const T& c_max (const T& a, const T& b) { return a < b ? b : a; } 那么隐式调用也就是隐式的...
  • Delphi XE7 隐式调用案例,欢迎各位下载调试- -
  • Intent的隐式调用

    2014-12-12 15:11:05
    隐式调用Intent:意图分为 显示和隐式 显示比较好理解就不介绍了,这里主要介绍隐式调用intent-filter(隐式意图过滤器)
  • delphi DLL显示隐式调用

    2013-10-21 12:04:06
    Delphi2010编写 内含两个文件夹,分显示调用和隐式调用。功能是求三个数最大数和最小数。 希望各位喜欢。 --By flw
  • 1.单参数构造函数隐式调用 C++中单参数构造函数是可以被隐式调用的,主要有两种情形会隐式调用单参数构造函数: (1)同类型对象的拷贝构造;即用相同类型的其它对象来初始化当前对象。 (2)不同类型对象的隐式...
  • java 显示调用和隐式调用 示例

    千次阅读 2018-03-26 21:14:37
    /** * java 显示调用和隐式调用 * @author raytseng * */class grandfather { public grandfather() {  System.out.println("调用grandfather的无参构造函数"); } public grandfather(String ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 258,403
精华内容 103,361
关键字:

隐式调用