Cocos2d-x2.2.3 入口解析

  在此我们使用vs2013打开工cocos2d-x工程程那么我们  我们使用win32的。拿到一个这种程序我们该怎么做呢? 第一步当然是找入口点了。因此 我们在工程目录下直接就可以找到这个win32的路口点。

 1 int APIENTRY _tWinMain(HINSTANCE hInstance,
 2                        HINSTANCE hPrevInstance,
 3                        LPTSTR    lpCmdLine,
 4                        int       nCmdShow)
 5 {
 6     UNREFERENCED_PARAMETER(hPrevInstance);
 7     UNREFERENCED_PARAMETER(lpCmdLine);
 8
 9     // create the application instance
10     AppDelegate app;
11     CCEGLView* eglView = CCEGLView::sharedOpenGLView();
12     eglView->setViewName("MyGame");
13     eglView->setFrameSize(480, 320);
14     return CCApplication::sharedApplication()->run();
15 }

像这种庞大的工程 一般来说 机制都不会简单。简单的只有main 函数而已。

在此我们可以看到  AppDelegate app;在栈中定义了一个类  app 类。而

CCEGLView* eglView = CCEGLView::sharedOpenGLView();
    eglView->setViewName("MyGame");
    eglView->setFrameSize(480, 320);

只是用来 设置 标题和 窗口大小的。

真正的主体出现在

CCApplication::sharedApplication()->run();

那我们就要对这一句进行分析了。

我们很容易可以看出  sharedApplication(); 是一个静态函数。

依据是啥?

CCApplication 它是一个类。

而->run();

这句可以看出什么呢?

从这里我有理由相信。

sharedApplication() 这个静态函数的返回值绝对是一个 类指针。

因此我们从这里可以使用vs2013的 F12键 来对程序进行跟踪。

static CCApplication* sharedApplication();

在这里找到了 它的定义

CCApplication* CCApplication::sharedApplication()
{
    CC_ASSERT(sm_pSharedApplication);
    return sm_pSharedApplication;
}

CC_ASSERT 这个是一个宏,如果为空就直接退出。

那我们看看那个sm 到底是个什么玩意。

CCApplication * CCApplication::sm_pSharedApplication = 0;

其实它就是一个静态变量。

CCApplication::CCApplication()
: m_hInstance(NULL)
, m_hAccelTable(NULL)
{
    m_hInstance    = GetModuleHandle(NULL);
    m_nAnimationInterval.QuadPart = 0;
    CC_ASSERT(! sm_pSharedApplication);
    sm_pSharedApplication = this;
}

它在构造函数里 对它进行了实现。在构造的时候 使用this

也就是说  CCApplication::sharedApplication()  返回的其实就是指向app的指针。

run();

函数会继续向下调用。

会调用到applicationDidFinishLaunching() 这个纯虚基类的一个接口。

时间: 2024-08-01 20:56:57

Cocos2d-x2.2.3 入口解析的相关文章

Java常量池解析与字符串intern简介

在Java应用程序运行时,Java虚拟机会保存一份内部的运行时常量池,它区别于class文件的常量池,是class文件常量池映射到虚拟机中的数据结构. 1.CONSTANT_Class入口解析 数组类的符号解析较为特殊.若是基本类型数组,那么虚拟机将创建该基本类型的新数组类,并创建一个Class实例来代表该类型,数组类的定义类加载器为 启动类加载器.若是引用类型的数组,那么在此之前还会进行引用类型的解析,数组类的定义类加载器为引用类型的定义类加载器. 非数组类和接口的的解析将经历以下步骤: (1

mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

1. 简介 1.1 系列内容 本系列文章讲解的是mybatis解析配置文件内部的逻辑, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 其背后的逻辑. 1.2 适合对象 了解如何使用 mybatis 来访问数据库.可参看<

Nginx基础笔记

Nginx基础笔记 资源 安装 ubuntu下 编译安装 基本操作 HTTP基本配置 配置说明 配置文件目录结构 配置文件结构 模块 模块化 index模块 Log模块 Real IP模块 Access模块 Rewrite模块 Proxy模块 upstream模块 其他 配置静态化目录 负载均衡 控制页面缓存 nginx的内置变量 nginx小结 资源 资源 Nginx 官网 Nginx 官方下载地址 Nginx最佳实践配置项目 地址 Nginx Configuration wiki 教程 ag

错题本-1

关于数据解析以下说法正确的是: XML数据结构有且只有一个根节点,并且不能嵌套 只能有一个根节点 但是可以嵌套 JSONObjetWithData:options:error:使用文件流 使用缓冲区数据解析 writeJSONObject:toStream:options:error:使用缓冲区数据解析json 使用流解析 XML解析分为两种:SAX解析和DOM解析 已知两个一维模式类别的类概率密度函数为: 先验概率P(1)=0.6,P(2)=0.4,则样本{x1=1.35,x2=1.45,x3

DEDE模块MVC框架基本说明,织梦CMSv5.7MVC开发框架

织梦MVC开发框架是一个精简.迷你的web开发框架,用这个开发框架可以编写基于织梦内容管理系统的扩展功能.模块(插件),甚至可以将其分离出来开发博客.BBS.SNS等. 目录结构说明:|_app|___control 控制器(C)|___model 模型(M)|___templates 视图模板(V)|___libraries 类库|___data 配置|___data\helper 小助手|___static 样式,js,图片文件夹|___index.php 统一入口文件 统一入口解析地址ht

织梦框架

导读:函数RunApp分析: function RunApp($ct,$ac=,$directory=) $ct:控制器 $ac:操作事件 $path:指定控制器所在的目录 该函数的执行流程: 1.对$ct,$ac字符串做非法字符过滤,把非数字和字母的都替换为空 2.找控制器对应的目录文件,require进来 3.动态生成对象 函数RunApp分析: function RunApp($ct,$ac='',$directory='') $ct:控制器 $ac:操作事件 $path:指定控制器所在的

自我分析-Spring IOC

Spring IOC容器实现原理大致是容器(Map)+反射(Java反射和cglib).Spring提供丰富的ApplicationContext,以FileSystemXmlApplicationContext来分析IOC容器. 代码中大量使用设计模式-模板模式,若不清楚请先看看模板模式再来看具体分析.分析框架代码时要 多使用查看类继承和调用关系快捷键,快捷键可以设置,我是设置为F1和F4. 注意: 1.本文重在怎么自我分析框架代码,所以对其中解析需自己实际跟踪代码实践方可. 2.spring

Getshell | 文件上传绕过整理

WAF绕过 安全狗绕过 1.绕过思路:对文件的内容,数据.数据包进行处理. 关键点在这里Content-Disposition: form-data; name="file"; filename="ian.php" 将form-data; 修改为~form-data; 2.通过替换大小写来进行绕过 Content-Disposition: form-data; name="file"; filename="yjh.php" C

2020/1/30 PHP代码审计之文件上传漏洞

0x00 漏洞简介 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击是最为直接和有效的,"文件上传"本身是没有问题,有问题的是文件上传后,服务器怎么处理,解释文件.如果服务器的处理逻辑做的不够安全,则会导致严重的后果,. 0x01漏洞条件 文件可上传 知道文件上传的路径 上传文件可以被访问 上传文件可以被执行 0x02 挖掘思路 上传点都调用同一个上传类,直接全局搜索上传函数 黑盒寻找上传点,代码定位. 0x03 写一个上传 我们先