当前位置: 首页 > news >正文

临河 网站建设wordpress 自定义 分类

临河 网站建设,wordpress 自定义 分类,领域网站建设,wordpress博客模板查询本人菜鸟#xff0c;文中若有代码、术语等错误#xff0c;欢迎指正 我写的项目地址#xff1a;https://github.com/liujianjie/GameEngineLightWeight#xff08;中文的注释适合中国人的你#xff09; 文章目录前言关键操作代码文件关键代码代码流程代码文件关键代码exter… 本人菜鸟文中若有代码、术语等错误欢迎指正 我写的项目地址https://github.com/liujianjie/GameEngineLightWeight中文的注释适合中国人的你 文章目录前言关键操作代码文件关键代码代码流程代码文件关键代码extern外部定义CreateApplication包含头文件条件编译和宏定义实现Dll导入与导出代码流程运行效果Github涉及的C知识前言 此节目的 将上一小节的main函数入口点写在Hazel项目中由引擎内部控制。 优化dll导出导入代码用条件编译宏定义来编写dll导出与导入代码 Cherno本节完整代码链接 https://github.com/TheCherno/Hazel/commit/f9fbbd2bf3d870a6586c5c4f70a867d78e27b113 关键操作 Hzel项目 右键属性(所有配置)C/C预处理器预处理器定义 输入 HZ_PLATFORM_WINDOWS;HZ_BUILD_DLL Sandbox项目 右键属性(所有配置)C/C预处理器预处理器定义 输入 HZ_PLATFORM_WINDOWS; 右键属性(所有配置)C/C常规附加包含目录 输入 $(SolutionDir)Hazel\src 为了Sandbox项目能引入Hazel项目的文件 #include Hazel.h代码文件关键代码代码流程 代码文件 Hazel项目 Application类 引擎内部功能实现 Core.h 来根据不同项目的条件编译而写dll导入还是导出的宏定义 EntryPoint.h 入口点main函数 Hazel.h 引入其它头文件控制给Sandbox项目提供哪些引擎内部功能 Sandbox项目 SanboxApp.cpp 应用层实现 关键代码 extern外部定义CreateApplication 在Hazel项目的Application.h中 namespace Hazel {class HAZEL_API Application{....};// To be defined in CLIENTApplication* CreateApplication(); }在Hazel命名空间内声明了CreateApplication函数 在Sandbox项目的SandboxApp.cpp中 Hazel::Application* Hazel::CreateApplication() {return new Sandbox(); }定义了CreateApplication函数 在EntryPoint.h中调用 extern Hazel::Application* Hazel::CreateApplication(); int main(int argc, char** argv){auto app Hazel::CreateApplication();... }将CreateApplication函数声明为extern表示此函数会在外部定义接下来使用的这函数时将使用在外部定义的CreateApplication 包含头文件条件编译和宏定义实现Dll导入与导出 在Core.h中 #pragma once #ifdef HZ_PLATFORM_WINDOWS#ifdef HZ_BUILD_DLL#define HAZEL_API __declspec(dllexport)#else#define HAZEL_API __declspec(dllimport)#endif #else#error Hazel only supports Windows! #endif根据条件编译定义HAZEL_API是dll导入还是导出由上的关键操作小点可知Hazel项目将是__declspec(dllexport)Sandbox项目是__declspec(dllimport) 问题在于这关Sandbox项目何事这明明是Hazel项目中的头文件 由于Sandbox#include Hazel.h而Hazel项目的Hazel.h包含了Application.hApplication.h又包含了Core.h文件 所以这Core.h的代码也会被拷贝到Sandbox项目的SandboxApp.cpp中#include Hazel.h的位置 并且Application.h也会被拷贝到Hazel.h的位置。 #include Hazel.h class Sandbox : public Hazel::Application { public:Sandbox(){}~Sandbox(){} }; .....所以Sandbox项目也有HAZEL_API宏定义且是__declspec(dllimport) 所以SandboxApp.cpp的代码将变成 #pragma once #ifdef HZ_PLATFORM_WINDOWS#ifdef HZ_BUILD_DLL#define HAZEL_API __declspec(dllexport)#else#define HAZEL_API __declspec(dllimport)#endif #else#error Hazel only supports Windows! #endif namespace Hazel {class HAZEL_API Application// HAZEL_API被替换成__declspec(dllimport){public:Application();virtual ~Application();void Run();};// To be defined in CLIENTApplication* CreateApplication(); } ....省略EntryPoint.h的代码下面将运行流程会有.... class Sandbox : public Hazel::Application { public:Sandbox(){}~Sandbox(){} }; .....所以Sandbox类导入了dll中的Application类且可以继承Application。 对应003节的代码 #pragma once namespace Hazel {_declspec(dllexport) void Print();// 导出 }namespace Hazel {_declspec(dllimport) void Print(); // 导入 } void main() {Hazel::Print();// 使用 }代码流程 开始运行Sandbox.exe 由于Sandbox中#include Hazel.h而Hazel项目的Hazel.h包含了Application.h和EntryPoint.h入口文件 Hazel.h #pragma once // For use by Hazel applications #include iostream #include Hazel/Application.h // ---Entry Point--------------------- #include Hazel/EntryPoint.h // -----------------------------------EntryPoint.h定义了main函数即写了入口点所以程序会在这运行 因为SandboxApp.cpp在第一行包含Hazel.hHazel.h又包含EntryPoint.h那么EntryPoint.h的代码会被拷贝到SandboxApp.cpp中 #include Hazel.h将拥有以下EntryPoint.h中的代码 #pragma once #ifdef HZ_PLATFORM_WINDOWS extern Hazel::Application* Hazel::CreateApplication(); int main(int argc, char** argv) {std::cout Core::main std::endl;auto app Hazel::CreateApplication();app-Run();delete app; } #endifmain函数中执行CreateApplication函数将调用定义在SandboxApp.cpp中的CreateApplication函数 Hazel::Application* Hazel::CreateApplication() {return new Sandbox(); }这函数返回的指针是Hazel项目中的Application父类指针所以auto app的类型是Application*。 当执行app-Run()函数时由于Run()函数没有声明为虚函数所以会调用Application中的Run()函数 #include Application.h namespace Hazel {Application::Application(){}Application::~Application(){}void Application::Run(){while (true);} }Application的Run函数是一个while循环所以循环会无限制运行中 运行效果 需要把最新生成的Hazel.dll放在Sandbox.exe文件夹下 Github .gitignore 在.git文件夹下新建.gitignore文件可以声明一些不想提交到暂存区的文件 # Binaries **/bin/ bin-int/# Visual Studio files and folder .vs/ **.sln **.vcxproj **.vcxproj.filters **.vcxproj.user **.csproj其它命令 git add *// 提交文件到暂存区 git reset . // 将暂存区文件返回 git status // 查看文件有无提交到暂存区状态 git commit -m 注释// 将暂存区的内容添加到仓库 git push origin main // 将本地的分支版本上传到远程并合并涉及的C知识 对应此节代码地方 Hazel::Application* Hazel::CreateApplication() {return new Sandbox(); } auto app Hazel::CreateApplication(); app-Run();转换为以下容易理解的代码 #include iostream using namespace std;class Application { public:void Run() {cout Application::Run() endl;} }; class Sandbox : public Application { public:void Run() {cout Sandbox::Run() endl;} }; void main() {Application* app new Sandbox();app-Run();// 由于Run()函数没有声明为virtual虚函数所以执行父类的Run函数 }
http://www.hkea.cn/news/14337445/

相关文章:

  • 美术类网站建设费用苏州网站建设店铺装修
  • 企业网站建设需要资料家庭电脑可以做网站吗
  • 建设用地规划许可证在哪个官方网站可以查询软考证书有用吗张雪峰
  • 景德镇建设网站济宁seo优化
  • 湖北做网站多少钱网站备案中心
  • 做网站如何选择颜色教育局网站建设方案
  • 网页设计总结报告500字国外搜索引擎优化
  • 网站建设最好的公司网站域名空间租用合同
  • 自己弄一个网站要多少钱资讯门户网站 dede
  • 济南营销网站建设公司网站建设费用详细表
  • 旅行社 网站系统怎么样模仿一个网站做简历
  • 购物网站哪个最便宜centos7 wordpress
  • 旅游网站开发系统的er图周村网站建设
  • 网站建设要购买服务器吗微商城分销系统制作
  • 专业的河南网站建设价格低黄岩城乡住房和建设局网站
  • 如何设置手机网站主页南通建设网站
  • 怎么给网站做外链邵连虎怎样做网络销售网站
  • 注册域名建设网站制图软件免费
  • 东莞网站建设选高科技瓦力工厂少儿编程加盟
  • 天津做美缝的网站网页qq音乐在线听
  • 设计公司网站建设方案响应式网站一般做几个设计稿
  • 煤矿建设工程质量监督总站网站做公司网站解析
  • .tv做网站怎么样包头移动官网网站建设
  • 建设装修公司网站学做网站要学什么东西
  • 爱建站小程序功能介绍如何自学做网站
  • 强生公司网站ai绘画软件免费
  • 东台网站建设服务商海兴网站建设
  • 网站 兼容性免费网上商城
  • 做网站需要学会什么软件互联网下载
  • 如何做网站粘贴广告景区网络推广方案