不知道现在还有没有人在开发DLL,其实VS下面开发C++的DLL还是很方便的,而且Release的时候也很方便,只要把模块的只能划分清楚,封装好不同的DLL工程,在一个主工程里面引用这些不同的DLL工程还是很不错的,这样发布的时候有一个主工程的EXE 和不同的DLL就可以了,不论是调试还是Release都比较简单,下面就简单说说开发的过程。
首先要有一个解决方案,我想这个怎么搞就不用我在这里废话了哦,生成一个项目作为界面,同时这个项目也是主项目。在该解决方案下面添加实现不同功能的各种项目,这些项目在向导中选择的时候选择为win32 项目,在为win32项目的应用程序设置中选择DLL就可以建立一个DLL工程了,在DLL工程中添加自己写的头文件和CPP文件,这样就建立了一个DLL不过现在还没有导出DLL。
要生成一个DLL还必须添加导出函数的宏, __declspec(dllexport)和__declspec(dllimport) 这里有一个小的技巧,就是利用工程的预编译宏来设置如果有一个工程名为Test,在要导出的类前面加上如下的代码
1#ifdef TEST_EXPORTS
2#define TEST_API __declspec(dllexport)
3#else
4#define TEST_API __declspec(dllimport)
5#endif
如果要导出的类名为class exportA;则可以在头文件中类的声明可以这样写class TEST_API exportA结可以把整个类导出了,在主工程中引用导出类exportA 只要包含该头文件就可以了,为什么会这样这是因为使用了上面的预编译头的缘故哦,在DLL工程中存在TEST_EXPORTS宏,所以在DLL工程中是类导出,在其他引用该工程的工程中包含搞头文件因为不存在TEST_EXPORTS宏,所以是类导入,呵呵 比较巧妙吧,其实看看网上的很多开源的库生成DLL的好像很多也使用了该方法,不过可能可能开源库很少是用VS开发的,所以不知道他们具体是怎么搞的。但是确实看到很多的开源库的配置文件性质的投文件中使用了这个技巧的。
上面说的还有一个问题就是在其他工程中包含DLL工程还存在问题,无法引用导出的类,应该还有一个工作要做那就是应该包含DLL工程生成的lib 和dll文件加上导出类的头文件就可以直接使用DLL工程中的类了哦,不过如果是自己开发还是最好把DLL工程和要引用DLL的工程作为一个解决方案的啦,这样方便调试的,这里有几个问题要注意:
1 项目依赖一定要设置好,至于怎么设置 那我就不说了哦,呵呵 在项目右键总是会的哦
2 项目引用要设置哦,比如说工程A使用了exportA类,那就一定要设置引用,引用工程Test,怎么设置,在A的通用属性中的引用中设置啦。
ok这样就可以开发出使用DLL的工程了哦,Release的时候含有一大堆的DLL给用户搞得很专业的样子哦,呵呵!PS:可能有人说导出类会暴露很多细节给用户啦,呵呵这个其实也好解决的哦,看看OCI的封装就会知道哦,使用私有类就可以隐藏所有的私有方法和属性的哦,具体怎么搞?呵呵去看看exception C++上关于IMPL的啦 上面有很好的说明撒。