学习笔记|如何用DLL最简单地保护您的工程代码
转贴自 http://www.vcsoft.org/bbs/dispbbs.asp?boardid=16&id=123 【学习笔记|如何用DLL最简单地保护您的工程代码】背景:
在VB下可以把一个工程编译成DLL导出在别的VB工程中使用,那么VC怎么能轻松地把自己所需要的部分导出呢?
需求:
1, 现有一已完工的VC6工程。
2, 客户利用关系强求源代码。
3, 有什么办法把其中绝大部分类封装成DLL?
4, 最好改动不要很大。
解决方法:
1, 在原工作区建一个扩展DLL工程。把生成文件路径指定为原工程文件路径,这样编译后不用拷贝DLL文件
2,在DLL工程的DLL.h中定义:
#ifdef GUILIB_IMPL
#define GUILIB_EXT_CLASS_declspec( dllexport )
#define GUILIB_EXT_API_declspec( dllexport )
#else
#define GUILIB_EXT_CLASS_declspec( dllimport )
#define GUILIB_EXT_API_declspec( dllimport )
#endif
3, 在原工程中的StdAfx.h中定义如下宏:
#define USE_DLL
#ifdef USE_DLL
#include "Dll//Dll.h"
#else
#define GUILIB_EXT_CLASS
#define GUILIB_EXT_API
#endif
4, 在你的原工程的所有文件中需要导出的类或函数前加一个宏,形如:
class GUILIB_EXT_CLASS CDllLoader//类
void GUILIB_EXT_API InitGuiLibDLL();
//函数
5, 在DLL工程中加入你希望导出的文件,注意,不是复制一份,而就用原来工程的.这样你可以修改你的EXE,而新的DLL仅重新编译一遍就好了,不用维护两份代码.
具体参考例子程序。
总结:
上述方法简单,可以实现工程开发时用源代码,在需要导出的时候仅需要编译一下DLL工程即可。而在使用时,如果您的工程中加入了导出类的实现文件,就是用的实现文件,如果把实现文件从工程中导出就是用的DLL中导出的类。用起来感觉比较方便。
推荐阅读
- 任时光绽放成六月繁花
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 我从来不做坏事
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 樱花雨
- 由浅入深理解AOP
- 如何寻找情感问答App的分析切入点
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- 继续努力,自主学习家庭Day135(20181015)
- mybatisplus如何在xml的连表查询中使用queryWrapper