背景:
在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中导出的类。用起来感觉比较方便。
如何用DLL最简单地保护您的工程代码
最新推荐文章于 2024-08-09 07:31:56 发布
转贴自