杂谈之封装main或WinMain启动函数

来源:互联网 发布:淘宝推广怎么做 编辑:程序博客网 时间:2024/05/18 04:48

作者:i_dovelemon

日期:2016 - 04 - 10

来源:CSDN

主题:VS,静态库,类静态函数



引言



        公司的上个项目已经结束了,加入了新的项目。新项目使用的是公司正在研发中的渲染库,趁着项目交接间的空闲时间,了解了下这个新的库。一般我初接触一个库,我都会先按F11,一遍一遍的跑几次,看看它的基本流程框架。当我使用同样的方法去了解公司的代码库的时候,我发现了一个很奇怪的现象。公司库里面的启动函数WinMain居然在项目工程里面找不到,而是在静态代码库里面。这个我以前从来没有遇到过。所以很好奇,就试着去试验了下。


试验



        (1)首先,我在VS2012中新建了一个Win32 Console程序的静态库工程

        (2)接着,我添加两个文件,分别为testlib.h和testlib.cpp,内容如下:

#ifndef __TESTLIB__H_#define __TESTLIB__H_int main();class Test{public:static void printMsg();};#endif

#include "stdafx.h"#include <iostream>#include "testlib.h"int main(){Test::printMsg();system("pause");return 0;}

        (3)然后编译,生成testlib.lib文件

        (4)我在新建了另外一个Win32 Console的EXE程序,添加main.cpp文件,并且将上面生成的testlib.lib和testlib.h放在新建的工程里面

        (5)main.cpp中添加如下的代码:

#include "testlib.h"#pragma comment(lib, "testlib.lib")#include <iostream>void Test::printMsg(){std::cout<<"HelloWorld" << std::endl;}

        (6)编译运行,之后发现的确能够运行。而且输出了我想要输出的printMsg中的内容。


其他



        细心的读者可能发现,我上面还有一个很奇怪的现象,那就是我在testlib中定义了一个类Test,并且类Test中存在一个未被实现的printMsg函数。而这个函数我在我的EXE项目中实现了它,并且最终也能够成功的调用到这个函数。而这个技巧正是我们扩展封装之后的main和WinMain的入口。我们可以通过类似的方法,向Lib中注入一个我们自己的App类,然后让lib运行我们的App,这样就能够实现完全面向对象的编程操作了。

        同时,我也很好奇,为什么类的static函数可以这样的去实现,而单纯的C函数为什么不可以这样去实现?留待下次去解决!
0 0
原创粉丝点击