[图文]6步学会VC封装DLL

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档