如何用DLL最简单地保护您的工程代码

    技术2022-05-11  72

    转贴自   http://www.vcsoft.org/bbs/dispbbs.asp?boardid=16&id=123

    背景:    在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中导出的类。用起来感觉比较方便。


    最新回复(0)