“封装” C/C++ 入口函数


:)  喜欢编程、图形、游戏、运动。


本文介绍了很多游戏或图形引擎中常用到的方法 – 封装入口函数。在面向对象的设计和开发中,封装是大家经常会讨论的话题。个人认为封装并不仅仅在面向对象编程中十分重要,在很多其它编程方式中都需要这个概念。
程序中首先接触的是入口函数,我们会在这个最重要的函数中添加很多关键的操作。如果这个函数你并不想让别人看到,或者你你想重用一个入口函数,那么该怎么办呢?对于入口函数进行“封装” – 将入口函数放入静态链接库中。我们所编写的项目仅需链接这个静态链接库并将库中所需实现的方法或函数实现即可。

实例:
项目:MyMain
说明:这是一个含有入口函数的静态链接库(请确认编译方式为静态链接库,动态链接不可用)
文件:mymain.h

#pragma once
/// 声明入口所调用的函数(不要在此项目中实现)
void Entry(void);

文件:mymain.cpp

#include "mymain.h"
/// 入口函数
int main(int argc, char* argv[]) {
  Entry();
  return 0;
}

项目:MyApp
说明:你的应用程序
文件:myapp.cpp

/// 链接静态链接库
#pragma comment(lib, "mymain.lib")
/// 导入静态链接库头文件
#include "mymain.h"
#include
/// 实现入口所调用的函数
void Entry() {
  printf("hi, I am your application.");
}

在编译好这两个项目后,可以看到我们将入口函数main放到了mymain静态链接库中,而实际的应用程序中是无法看到这个函数的。而这个函数又会调用Entry函数,所以你只需要在Entry中实现你所要的东西即可。

这个方法在很多SDK中所采用,它有利于进行跨平台开发。开发人员无需关心与系统交互的实现方式,仅仅去完成SDK中所要求实现的函数即可。做为应用开发人员这真的是很开心的一件事情。

附:
在C/C++编程中,如何自定义一个入口函数?
– 在VC++的项目属性中配置新的入口函数名,或者在代码中添加一行来指定你的入口函数:

#pragma comment(linker, "/ENTRY:mymain")
Fork me on GitHub
关于

喜欢编程、图形、游戏、运动。

文章分类 设计 标签: , ,

Info

Ohloh profile for Alex Chi