DLL的优点
*代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”。
“白盒复用”的缺点比较多,总结起来有4点。 暴露了源代码;多份拷贝,造成存储浪费; 容易与程序员的“普通”代码发生命名冲突; 更新功能模块比较困难,不利于问题的模块化实现; 实际上,以上4点概括起来就是“暴露的源代码”造成“代码严重耦合”。为了弥补这些不足,就提出了“二进制级别”的代码复用。使用二进制级别的代码复用一定程度上隐藏了源代码,对于缓解代码耦合现象起到了一定的作用。这样的复用被称为“黑盒复用”。*
刚好需要创建一个DES加密解密的dll,所以下面DES加密解密程序作为示范
创建dll
创建动态链接库 (DLL) 项目
1 - 在菜单栏上,依次选择“文件”、“新建”、“项目”。
在“新建项目”对话框的左窗格中,依次展开“已安装”、“模板”、“Visual C++”,然后选择“Win32”。
在中间窗格中,选择“Win32 控制台应用程序”。
在“名称”框中为项目指定名称,例如testdll。 在“解决方案名称”框中为解决方案指定名称。 选择“确定”按钮。
在“Win32 应用程序向导”对话框的“概述”页上,选择“下一步”按钮。
在“应用程序设置”页面的“应用程序类型”下,选择“DLL”。
选择“完成”按钮创建项目。
2)创建头文件
在菜单栏上,依次选择“项目”、“添加新项”。 在“添加新项”对话框的左窗格中,在“Visual C++”下选择“代码”。 在中间窗格中,选择“头文件(.h)”。 为头文件指定名称(例如 testdll.h),然后选择“添加”按钮。 将显示一个空白头文件。
testdll.h
#ifndef TESTDLL_H_
#define TESTDLL_H_
#ifdef MYLIBDLL
#define MYLIBDLL extern "C" _declspec(dllimport)
#else
#define MYLIBDLL extern "C" _declspec(dllexport)
#endif
MYLIBDLL void Des(char *M,char *Out , char *key,bool En_Deflag);
// TestDll.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "testdll.h"
#include "Box.h"
#include <iostream>
using namespace std;
void Convert(bool *In,bool *Out, const int *T,int num);
void F_des(bool R[32],bool const *Subkey );
void Byte2Bit(bool *Out, const int *In, int bits);//字节组转换成位组
void RotateL(bool *In, int len, int loop);//循环左移
void Xor(bool *InA, const bool *InB, int len);//异或
void SboxConvert(bool *out,const bool In[48]);//S盒变换
bool S_Key[16][48];// 16个子密钥
//字符转成二进制,length字符数组的长度
void Char2Bit(const char* _carray,