[图文]6步学会VC封装DLL
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6步学会简单DLL封装
——浅影_Ashen
邮箱:nathanielwen@ 开始之前感谢小侯童鞋,本人昨晚研究dll两个小时无果,与今天早上幸得点拨,遂有此文~希望可以帮助很多跟我一样的菜鸟入门。
首先,我们需要4个文件以及2项目,分别是
文件部分:
1、dll.h(用于函数声明等)
2、dllFunc.cpp(用于函数的具体实现)
3、dllMain.cpp(dll的主函数文件)
4、dlltest.cpp(测试dll是否封装成功)
项目部分:
1、dllcreate(项目名)
2、dlluse(项目名)
明白了大体框架之后,接下来是具体操作步骤:
一、新建一个win32控制台项目,输入路径,以及文件名(这里用dllcreate作为项
目名)之后,单击确定,选择下一步,并勾选“dll”、“空项目”,单击完成之后建立项目完毕。
(由于本人使用的是VS2012,如果使用VC 6.0可能略有不同)
二、为项目添加3个文件(右键单击某个文件夹,选择"添加->新建项")
三、为3个文件添上代码部分(具体代码详见文章末尾)
dll.h作为头文件,负责声明函数原型,其中“extern"C"_declspec(dllexport)
”为固定格式,“extern"C"”表示用C语言描述,“_declspec(dllexport)”表示这将是一个导出函数。
函数的具体实现:注意需要把dll.h包括进来。其他部分和C或C++的格式完全一样。
dll的主函数,格式固定,具体参数如有疑问请找度娘~~
四、编译运行
可能会提升无法启动,但是不要着急,打开项目的debug文件夹
有dllcreate.dll和dllcreate.lib说明生成dll文件已经成功。
五、以上操作,针对dll的封装已经完成,接下来我们需要调用它,以测试封装是否成
功。创建一个新的win32控制台项目,命名为dlluse,单击确定,选择下一步,勾选“控制台应用程序”和“空项目”,并为它添加一个dlltest.cpp文件
文件内具体代码如下:
第4行和第5行为固定格式,是为了导入Sum函数。其他部分与C++格式完全相同。现在单击运行,提示无法开dll文件。这是为什么呢??因为“#pragma comment(lib, "dllCreate.lib")”这行代码没有具体指出dllcreate.lib的路径,系统默认搜索当前文件夹,如果没有,就报错。
六、将刚才创建的.dll和.lib文件复制到“dlluse”这个项目中,dlltest.cpp所在文件
夹下(应该在…/dlluse/dlluse中),再次编译运行,可以看到
运行成功!~~
附录:
dll.h部分
extern "C" _declspec(dllexport) int Sum(int a,int b);
dllFunc.cpp部分
#include "dll.h"
int Sum(int a,int b){
return a+b;
}
dllMain.cpp部分
#include "windows.h"
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:break;
case DLL_THREAD_ATTACH:break;
case DLL_THREAD_DETACH:break;
case DLL_PROCESS_DETACH:break;
}
return TRUE;
}
dlltest.cpp部分
#include "iostream"
#include "windows.h"
using namespace std;
#pragma comment(lib, "dllCreate.lib")
extern "C" _declspec(dllimport) int Sum(int a,int b);
int main(){
int s;
s = Sum(3,4);
cout<
system("pause");
return 0;
}