精华内容
下载资源
问答
  • 本文实例讲述了C++中COM组件初始化方法。分享给大家供大家参考。具体如下: 这里使用BCB 在使用TADOConnect等组件时需要进行初始化 调用接口 : CoInitialize(NULL);//初始化COM套件 CoUninitialize();//释放COM...
  • Swift 初始化语法糖,更简介的语法实现组件初始化.zip,快速初始化的超甜语法糖
  • Swift 初始化语法糖,用更简洁的语法实现组件初始化
  • eCos组件初始化

    千次阅读 2013-10-15 20:30:41
    eCos组件初始化机制 eCos组件初始化利用了C++静态对象实例初始化的机制。C++对象在初始化时不像C语言中的静态变量那样只是在特定的内存单元写入特定的数值,C++对象在初始化时将会调用该对象类的...

    mingdu.zheng <at> gmail <dot> com
    http://blog.csdn.net/zoomdy/article/details/12754709

    eCos组件初始化机制

    eCos组件初始化利用了C++静态对象实例初始化的机制。C++对象在初始化时不像C语言中的静态变量那样只是在特定的内存单元写入特定的数值,C++对象在初始化时将会调用该对象类的构造函数来初始化对象。如果C++对象是在函数内声明,那么函数执行到对象的声明处调用类构造函数来初始化对象,如果C++对象在函数外声明,也就是将C++对象声明为全局对象或静态对象,那么编译器会将该对象的初始化代码地址(函数指针)写到名为".ctors"节,普通程序在进入main函数前由操作系统的运行时库调用存储在".ctors"中的函数指针列表来初始化全局或静态C++对象。

    eCos应用在编译后同样会将全局或静态C++对象的初始化代码地址写到".ctors"节,在进入用户代码前,eCos HAL将调用cyg_hal_invoke_constructors函数,该函数调用存储在".ctors"节中的初始化代码。

    需要注意的一点,".ctors"中存储的是对象初始化代码地址,而不是类构造函数,因为在初始化对象时,不仅要调用构造函数,而且还要给构造函数传入参数,即使是没有参数的默认构造函数也需要传入隐式的this指针。

    忽略CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG选项的cyg_hal_invoke_constructors函数,如果配置了CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG选项,那么该函数将更加复杂些。

     

    extern pfunc __init_array_start__[]; 
    extern pfunc __init_array_end__[];  
    #define CONSTRUCTORS_START  (__init_array_start__[0])// ".ctors"的起始地址
    #define CONSTRUCTORS_END    (__init_array_end__) // ".ctors"的终止地址
    #define NEXT_CONSTRUCTOR(c) ((c)++)
    
    void
    cyg_hal_invoke_constructors (void)
    {
        pfunc *p;
        for (p = &CONSTRUCTORS_START; p != CONSTRUCTORS_END; NEXT_CONSTRUCTOR(p))
            (*p)();
    }

     

    C++语言实现的组件初始化

     

     

    举个例子,每个操作系统都需要一个空闲线程,eCos也不例外,eCos的空闲线程就是以C++全局对象实例初始化机制来创建的。

     

    Cyg_IdleThread idle_thread[CYGNUM_KERNEL_CPU_MAX] CYG_INIT_PRIORITY( IDLE_THREAD );
    
    Cyg_IdleThread::Cyg_IdleThread()
        : Cyg_Thread( CYG_THREAD_MIN_PRIORITY,
                      idle_thread_main,
                      0,
                      (char *)"Idle Thread",
                      (CYG_ADDRESS)idle_thread_stack[this-&idle_thread[0]],
                      CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE)
    {
        Cyg_Scheduler::scheduler.set_idle_thread( this, this-&idle_thread[0] );
    }


    从代码可以看出,eCos的空闲线程Cyg_IdleThread是从常规线程Cyg_Thread继承过来的,除了和常规线程一样的初始化过程外,额外地调用了Cyg_Scheduler::scheduler.set_idle_thread函数,该函数将本线程设置成eCos的空闲线程,并将本线程设置成就绪状态。

     

     

    C语言实现的组件初始化

     

     

     

    如果eCos组件是使用C语言实现的呢?举个例子,IO组件,该组件是使用C语言实现的,但是如果浏览他的源代码,会发现他有一个C++源代码ioinit.cxx,在这个文件中将定义一个C++类,而这个类唯一的作用就是在构造函数中调用cyg_io_init函数,然后声明一个静态的类实例来初始化IO组件。

     

    externC void cyg_io_init(void);
    
    class cyg_io_init_class {
    public:
        cyg_io_init_class(void) { 
            cyg_io_init();
        }
    };
    
    static cyg_io_init_class _cyg_io_init CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO);
    ​

     

    初始化次序的问题

     

     

    因为组件之间的依赖关系,初始化过程需要按照一定的次序进行。初始化的次序由CYGBLD_ATTRIB_INIT_PRI宏指定,该宏带有一个参数,该参数数值越小,那么越早调用该实例的初始化代码,例如_cyg_io_init对象的CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO)展开后为__attribute__((init_priority(49000))),而idle_thread对象的宏展开后为__attribute__((init_priority(11100))),由此可以判断空闲线程在IO组件之前被初始化。
     

    检查初始化代码

     

    使用nm和grep可以打印过滤可执行文件的符号列表来检查初始化代码,符号前缀“_GLOBAL__sub_I”表示这是静态对象初始化代码,符号中间部分的数字决定初始化次序,数字后面的部分如果是全局对象,那么是对象标识符,如果是静态变量,与对象的存储位置有关,可能是所在文件名,也可能是对象所在位置后面的全局标识符,反正不是对象标识符,这个有点混乱。

     

    $ nm app.elf | grep "t _GLOBAL"
    01001b20 t _GLOBAL__sub_I.10100_diag_write_char
    01002da0 t _GLOBAL__sub_I.11000_cyg_scheduler_sched_lock
    01002340 t _GLOBAL__sub_I.11100__ZN18Cyg_HardwareThread12thread_entryEP10Cyg_Thread
    01002630 t _GLOBAL__sub_I.12000__ZN13Cyg_Interrupt15disable_counterE
    01005d70 t _GLOBAL__sub_I.14000__ZN9Cyg_Clock15real_time_clockE
    01006020 t _GLOBAL__sub_I.19900_cygmem_pool_heap1
    01000050 t _GLOBAL__sub_I.49000_ioinit.cxx
    010063a0 t _GLOBAL__sub_I.56000__ZN20Cyg_libc_stdio_files5filesE
    01003290 t _GLOBAL__sub_I.56000_cyg_libc_main_thread
    01006300 t _GLOBAL__sub_I.56000_cyg_libc_stdio_stdin
    01003490 t _GLOBAL__sub_I.56001_cyg_libc_stdio_stdout
    01006260 t _GLOBAL__sub_I.56002_cyg_libc_stdio_stderr
    01000cc0 t _GLOBAL__sub_I.56100_cyg_iso_c_start
    

     

     

     

     

     

    展开全文
  • eCos组件初始化 .

    千次阅读 2013-10-21 11:21:24
    eCos组件初始化机制 eCos组件初始化利用了C++静态对象实例初始化的机制。C++对象在初始化时不像C语言中的静态变量那样只是在特定的内存单元写入特定的数值,C++对象在初始化时将会调用该对象类的构造函数来初始化...

    eCos组件初始化机制

    eCos组件初始化利用了C++静态对象实例初始化的机制。C++对象在初始化时不像C语言中的静态变量那样只是在特定的内存单元写入特定的数值,C++对象在初始化时将会调用该对象类的构造函数来初始化对象。如果C++对象是在函数内声明,那么函数执行到对象的声明处调用类构造函数来初始化对象,如果C++对象在函数外声明,也就是将C++对象声明为全局对象或静态对象,那么编译器会将该对象的初始化代码地址(函数指针)写到名为".ctors"节,普通程序在进入main函数前由操作系统的运行时库调用存储在".ctors"中的函数指针列表来初始化全局或静态C++对象。

    eCos应用在编译后同样会将全局或静态C++对象的初始化代码地址写到".ctors"节,在进入用户代码前,eCos HAL将调用cyg_hal_invoke_constructors函数,该函数调用存储在".ctors"节中的初始化代码。

    需要注意的一点,".ctors"中存储的是对象初始化代码地址,而不是类构造函数,因为在初始化对象时,不仅要调用构造函数,而且还要给构造函数传入参数,即使是没有参数的默认构造函数也需要传入隐式的this指针。

    忽略CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG选项的cyg_hal_invoke_constructors函数,如果配置了CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG选项,那么该函数将更加复杂些。

    1. extern pfunc __init_array_start__[];   
    2. extern pfunc __init_array_end__[];    
    3. #define CONSTRUCTORS_START  (__init_array_start__[0])// ".ctors"的起始地址   
    4. #define CONSTRUCTORS_END    (__init_array_end__) // ".ctors"的终止地址   
    5. #define NEXT_CONSTRUCTOR(c) ((c)++)   
    6.   
    7. void  
    8. cyg_hal_invoke_constructors (void)  
    9. {  
    10.     pfunc *p;  
    11.     for (p = &CONSTRUCTORS_START; p != CONSTRUCTORS_END; NEXT_CONSTRUCTOR(p))  
    12.         (*p)();  
    13. }  
    extern pfunc __init_array_start__[]; 
    extern pfunc __init_array_end__[];  
    #define CONSTRUCTORS_START  (__init_array_start__[0])// ".ctors"的起始地址
    #define CONSTRUCTORS_END    (__init_array_end__) // ".ctors"的终止地址
    #define NEXT_CONSTRUCTOR(c) ((c)++)
    
    void
    cyg_hal_invoke_constructors (void)
    {
        pfunc *p;
        for (p = &CONSTRUCTORS_START; p != CONSTRUCTORS_END; NEXT_CONSTRUCTOR(p))
            (*p)();
    }

    C++语言实现的组件初始化

    举个例子,每个操作系统都需要一个空闲线程,eCos也不例外,eCos的空闲线程就是以C++全局对象实例初始化机制来创建的。

    1. Cyg_IdleThread idle_thread[CYGNUM_KERNEL_CPU_MAX] CYG_INIT_PRIORITY( IDLE_THREAD );  
    2.   
    3. Cyg_IdleThread::Cyg_IdleThread()  
    4.     : Cyg_Thread( CYG_THREAD_MIN_PRIORITY,  
    5.                   idle_thread_main,  
    6.                   0,  
    7.                   (char *)"Idle Thread",  
    8.                   (CYG_ADDRESS)idle_thread_stack[this-&idle_thread[0]],  
    9.                   CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE)  
    10. {  
    11.     Cyg_Scheduler::scheduler.set_idle_thread( thisthis-&idle_thread[0] );  
    12. }  
    Cyg_IdleThread idle_thread[CYGNUM_KERNEL_CPU_MAX] CYG_INIT_PRIORITY( IDLE_THREAD );
    
    Cyg_IdleThread::Cyg_IdleThread()
        : Cyg_Thread( CYG_THREAD_MIN_PRIORITY,
                      idle_thread_main,
                      0,
                      (char *)"Idle Thread",
                      (CYG_ADDRESS)idle_thread_stack[this-&idle_thread[0]],
                      CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE)
    {
        Cyg_Scheduler::scheduler.set_idle_thread( this, this-&idle_thread[0] );
    }

    从代码可以看出,eCos的空闲线程Cyg_IdleThread是从常规线程Cyg_Thread继承过来的,除了和常规线程一样的初始化过程外,额外地调用了Cyg_Scheduler::scheduler.set_idle_thread函数,该函数将本线程设置成eCos的空闲线程,并将本线程设置成就绪状态。

    C语言实现的组件初始化

    如果eCos组件是使用C语言实现的呢?举个例子,IO组件,该组件是使用C语言实现的,但是如果浏览他的源代码,会发现他有一个C++源代码ioinit.cxx,在这个文件中将定义一个C++类,而这个类唯一的作用就是在构造函数中调用cyg_io_init函数,然后声明一个静态的类实例来初始化IO组件。

    1. externC void cyg_io_init(void);  
    2.   
    3. class cyg_io_init_class {  
    4. public:  
    5.     cyg_io_init_class(void) {   
    6.         cyg_io_init();  
    7.     }  
    8. };  
    9.   
    10. static cyg_io_init_class _cyg_io_init CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO);  
    11. ​  
    externC void cyg_io_init(void);
    
    class cyg_io_init_class {
    public:
        cyg_io_init_class(void) { 
            cyg_io_init();
        }
    };
    
    static cyg_io_init_class _cyg_io_init CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO);
    ​

    初始化次序的问题

    因为组件之间的依赖关系,初始化过程需要按照一定的次序进行。初始化的次序由CYGBLD_ATTRIB_INIT_PRI宏指定,该宏带有一个参数,该参数数值越小,那么越早调用该实例的初始化代码,例如_cyg_io_init对象的CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO)展开后为__attribute__((init_priority(49000))),而idle_thread对象的宏展开后为__attribute__((init_priority(11100))),由此可以判断空闲线程在IO组件之前被初始化。

    检查初始化代码

    使用nm和grep可以打印过滤可执行文件的符号列表来检查初始化代码,符号前缀“_GLOBAL__sub_I”表示这是静态对象初始化代码,符号中间部分的数字决定初始化次序,数字后面的部分如果是全局对象,那么是对象标识符,如果是静态变量,与对象的存储位置有关,可能是所在文件名,也可能是对象所在位置后面的全局标识符,反正不是对象标识符,这个有点混乱。

    1. $ nm app.elf | grep "t _GLOBAL"  
    2. 01001b20 t _GLOBAL__sub_I.10100_diag_write_char  
    3. 01002da0 t _GLOBAL__sub_I.11000_cyg_scheduler_sched_lock  
    4. 01002340 t _GLOBAL__sub_I.11100__ZN18Cyg_HardwareThread12thread_entryEP10Cyg_Thread  
    5. 01002630 t _GLOBAL__sub_I.12000__ZN13Cyg_Interrupt15disable_counterE  
    6. 01005d70 t _GLOBAL__sub_I.14000__ZN9Cyg_Clock15real_time_clockE  
    7. 01006020 t _GLOBAL__sub_I.19900_cygmem_pool_heap1  
    8. 01000050 t _GLOBAL__sub_I.49000_ioinit.cxx  
    9. 010063a0 t _GLOBAL__sub_I.56000__ZN20Cyg_libc_stdio_files5filesE  
    10. 01003290 t _GLOBAL__sub_I.56000_cyg_libc_main_thread  
    11. 01006300 t _GLOBAL__sub_I.56000_cyg_libc_stdio_stdin  
    12. 01003490 t _GLOBAL__sub_I.56001_cyg_libc_stdio_stdout  
    13. 01006260 t _GLOBAL__sub_I.56002_cyg_libc_stdio_stderr  
    14. 01000cc0 t _GLOBAL__sub_I.56100_cyg_iso_c_start  

    原文见:http://blog.csdn.net/zoomdy/article/details/12754709

    展开全文
  • 组件初始化问题

    2019-04-26 15:33:08
    组件初始化要在setContentView后面,也就是findviewbyid要在这个后面要不然会报空指针错误

    组件的初始化要在setContentView后面,也就是findviewbyid要在这个后面要不然会报空指针错误

    展开全文
  • U8备份提示“远程组件初始化失败”

    千次阅读 2016-06-16 15:57:37
    问题现象:SQL出现问题后重装,U8没有重装,之后连接数据库后附加数据,U8可以正常登陆,但是在备份的时候提示远程组件初始化失败。问题原因:因为重装了SQL,导致Master库中丢失了存储过程储xp_UFRegRead和xp_...
    问题现象:

    SQL出现问题后重装,U8没有重装,之后直接附加数据库,U8可以正常登陆,但是在备份的时候提示远程组件初始化失败。

     
    问题原因:
    因为重装了SQL,没有进行U8数据源初始化,导致Master库中丢失了存储过程储
    解决办法:在Master库重建存储过程
    USE [master]
    GO
    
    SET ANSI_NULLS OFF
    GO
    
    SET QUOTED_IDENTIFIER OFF
    GO
    
    CREATE PROCEDURE [dbo].[U8FileServerExtendProc]
    	@cmdLine [nvarchar](4000),
    	@Greeting [nvarchar](4000) OUTPUT
    WITH EXECUTE AS CALLER
    AS
    EXTERNAL NAME [U8FileServerExtendProc].[U8FileServerExtendProc.FileServerExtendProc].[DealWithFiles]
    GO
    
    
    USE [master]
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
          create proc [dbo].[xp_BackupFiles] 
    	  @cmdLine nvarchar(4000)  as   DECLARE 
    	  @return_value int, @strErr nvarchar(4000);   
    	  EXECUTE @return_value = dbo.U8FileServerExtendProc @cmdLine,
    	  @strErr output   if @return_value=0   begin        RAISERROR (@strErr, 16, 1)   End 
    GO
    
    
    

    USE [master]
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
     create proc [dbo].[xp_UFRegRead] 
     @root nvarchar(800), 
     @keyPos nvarchar(2000), 
     @key nvarchar(800) 
     as 
     exec master..xp_regread @root,@keyPos,@key 
    GO
    
    
    
    USE [master]
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
     create proc [dbo].[xp_UFRegWrite] 
     @keyPos nvarchar(2000), 
     @key nvarchar(800), 
     @value nvarchar(4000) 
     as 
     exec master..xp_regwrite 'HKEY_LOCAL_MACHINE',@keyPos,@key,'reg_sz',@value 
    GO
    
    
    

    展开全文
  •  日志显示“初始化clsExport出错,远程组件初始化失败” 手动输出账套:  提示“远程组件初始化失败” 后来在master数据库中重建xp_UFregread和xp_UFregwrite这两个存储过程即可解决问题。 问题回顾与分析: 我在对...
  • 初入vue的朋友可能会疑惑,组件初始化的时候,created,props,data到底谁先执行? 今天,我就带大家从源码的角度看看到底谁先执行? 我们知道,vue是个实例 那我们就从new Vue()开始,看看到底做了什么,首先是_...
  • VUE组件初始化顺序

    千次阅读 2019-01-22 09:49:36
    很有用的~ inject、props、methods、 data、 computed、 watch、
  • COM组件初始化

    千次阅读 2011-01-25 15:59:00
    使用BCB在使用TADOConnect等组件时需要进行初始化调用接口 : CoInitialize(NULL);//初始化COM套件CoUninitialize();//释放COM套件在DLL入口中调用static bool isCoInitialize = false; //是否是自己进行的初始化 ...
  • 简述VUE组件初始化

    千次阅读 2019-02-18 11:32:28
    初始化render相关的属性,$attrs、$listeners为响应式属性,其中_parentListeners是上面提到的initInternalComponent()方法生成的。 /* istanbul ignore else */ { defineReactive$$1(vm, '$attrs', parent...
  • plupload 上传组件初始化问题

    千次阅读 2017-02-28 16:18:34
    Plupload 上传组件支持html5,flash,silverlight,html4四种上传方式,初始化时可以在如下配置中指定加载顺序: 当我们没有配置runtimes参数时,Plupload默认会根据你的其他的参数配置来选择最合适的上传方式。如果...
  • '' } }, methods: { childData: function (data) { // data就是子组件传过来的值 this.data= data } } } </script> 组件初始化 v-if="dialogFormVisible" :visible.sync="dialogFormVisible" 强制刷新 $forceUpdate...
  • com组件初始化

    千次阅读 2010-06-22 18:13:00
    今天做一个检测tuner的小程序,用到了枚举设备,没有任何输出结果,查代码发现用的:  HRESULT hr = ... 返回值居然错误,才恍然大悟,原来是没有初始化COM组件。 加上: CoInitializeEx(NULL
  • VUE2.0 父组件传值给子组件初始化

    千次阅读 2018-03-13 14:38:41
    组件中调用子组件autoSelect(我的项目里autoSelect是一个公共组件)&lt;autoSelect v-bind:name="propName" @getAutoSelectResult="listenAutoSelectResult"&gt;&lt;/autoSelect&...
  • OGG 运维篇+DDL抓取组件初始化

    千次阅读 2021-02-27 15:46:34
    ★ 解决方法 如果重启无法解决该问题,可以重新初始化OGG-DDL抓取组件修复该异常 (最坏情况也只是初始化当前OGG下的所有抓取进程即可) ★ 数据一致 本文的重新初始化OGG-DDL抓取组件方法不会导致数据丢失和数据库...
  • // 需要在初始化的时候做的操作 } catch (e) { } console.log('lifetimes执行了qqq') // 在组件实例进入页面节点树时执行 }, detached: function () { // 在组件实例被从页面节点树移除时执行 }, }, 这个
  • element-ui el-pagination组件初始化

    千次阅读 2019-03-21 14:43:56
    饿了么提供的el-pagination组件没有提供定位到第一页的方法,通过current-page属性设置页码虽然定位到第一页了,但是el-pagination组件还是认为当前页面是上次手动点击的页码 例如:用户在当前页面浏览到了第三页,...
  • 最近写项目 有个需求是点击树菜单显示 表格和tab标签组件 问题在于 当el-tab上一层级设置v-show时候 显示的时候 下面的小横条...问题在于 在v-mode 绑定的变量 data里面初始化赋值为 "全部"了 设置为空即可 结束 ...
  • COM组件初始化时的错误

    千次阅读 2012-04-11 16:00:18
    在用ADO组件进行数据库操作时,由于是COM组件,需要初始化COM组件。 使用函数:AfxOleInit() 在编译时出现如下错误: error C2065: 'AfxOleInit' : undeclared identifier 错误分析: 看到很多使用AfxOleInit()...
  • 在项目中使用vue + element编写前端...data和pagination组件代码如下: 通过分析找到问题所在,两种情况都导致current-page绑定的record2.number变为1,从而触发pagination的current-change事件,向后台发出请...
  • 【翻译】内核组件初始化体系结构 为了全面了解内核组件,你不仅需要了解特定的程序做了什么,也要知道这些程序什么时候被谁调用。内核子系统的初始化是一项基本任务,这些任务由内核根据它自己的模式来处理。这个...
  • } }, (2)handler方法和immediate属性 如果 父组件向子组件传值时 这时候值并没有发生改变我们却想在初始的时候就触发watch 就需要这个属性了 immediate 默认为false 为true时只初始化可以被监听 watch: { testData...
  • 比如URL和Controller的绑定,以及URL和方法method的绑定,拦截器的初始化,视图解析器的初始化等web9大组件初始化 在上篇博文: 【小家Spring】Spring容器(含父子容器)的启动过程源码级别分析(含web.xml启动...
  • com组件初始化的几个方法

    千次阅读 2009-11-15 23:42:00
    本篇幅参考http://www.vckbase.com/document/viewdoc/?id=1500代码总结了几种的com初始化的方法 1. 经过 IUnknown得到 IFun 接口指针 CoInitialize(NULL);IUnknown * pUnk = NULL;IFun * pFun = NULL;hr=::...
  • /** * The ordered set of ServletContainerInitializers for this web application. */ // map的value为WebApplicationInitializer的集合 private Map<ServletContainerInitializer,Set<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 536,624
精华内容 214,649
关键字:

组件初始化