预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

用C++进行DLL编程入门 编写第一个入门级dll文件 1.新建一个dlltest的dll工程,加入一源文件dlltest.cpp,包含add和subtract两个函数如下: _declspec(dllexport)intadd(inta,intb) { returna+b; } _declspec(dllexport)intsubtract(inta,intb) { returna-b; } //---------------------------------------------------------------- 注意: 在函数名前加上_declspec(dllexport),这样编译后在连接的时候才会生成dlltest.lib(引入库文件)和dlltest.exp(输出库文件),并且在命令提示符下用dumpbin命令可以看到导出了哪些函数。 方法:在命令提示符下,转到dll文件所在目录下,输入dumpbin–exportsdlltest.dll,列出导出函数如下: 这里注意到函数名字已经被改成了?add@@YAHHH@Z,这种现象叫做名字粉碎,是为了支持函数重载而做的。 2.编写一个基于对话框的MFC程序测试DLL,工程名为calldll,放置两个按纽add和subtract,响应按纽消息,调用这个DLL的add和subtract函数。 先添加响应按钮消息的函数OnAdd和OnSubtract,然后在函数所在源文件中写完整函数体如下: //externintadd(int,int); //externintsubtract(int,int); _declspec(dllimport)intadd(int,int); _declspec(dllimport)intsubtract(int,int); voidCCalldllDlg::OnAdd() { //TODO:Addyourcontrolnotificationhandlercodehere CStringstr; str.Format("2+3=%d",add(2,3)); MessageBox(str); } voidCCalldllDlg::OnSubtract() { //TODO:Addyourcontrolnotificationhandlercodehere CStringstr; str.Format("3-2=%d",subtract(3,2)); MessageBox(str); } //------------------------------------------------------------ 这里采用隐式链接的方式加载动态链接库: 注意:要用关键字extern先声明这两个函数,表明这两个函数是在外部定义的(不过程序中将它注释掉了)。最好是用_declspec(dllimport)表明函数是从动态链接库的lib文件中引入的,这样效率更高。 将文件dlltest.lib拷贝到此工程目录下,并在ProjectSettings的Link标签下添加此文件:(否则编译会成功,但连接时会出错提示找不到函数的定义) 编译连接生成calldll.exe,这时用Dumpbin-importscalldll.exe查看它的输入信息,可以看到它加载了dlltest.dll。 运行calldll.exe(要成功运行还需将dlltest.dll拷贝到工程目录或此exe所在目录下) 这样,最简单的第一个dll就完成了。 编写涉及到类和头文件的dll文件 新建一个dlltest的dll工程,加入一头文件dlltest.h和一源文件dlltest.cpp。 dlltest.h: #ifdefDLL_API #else #defineDLL_API_declspec(dllimport) #endif DLL_APIintadd(int,int); DLL_APIintsubtract(int,int); classDLL_APIPoint1//将整个类导出 { public: voidoutput(intx,inty); voidoutput1(intx,inty); }; classPoint2 { public: DLL_APIvoidoutput(intx,inty);//仅导出类中的一个函数 voidoutput1(intx,inty); }; //---------------------------------------------------- dlltest.cpp: #defineDLL_API_declspec(dllexport) #include"dlltest.h