动态链接库的创建和调用
创建动态连接库的步骤:
1.创建非MFC DLL动态链接库
1.打开文件->新建->项目选项,选择win32动态链接库->示例项目->项目名称:DllDemo。
2.创建新的。h文件DllDemo.h
#ifdef DllDemo_EXPORTS
# define dll API _ _ declspec(dll export)
#否则
# define dll API _ _ declspec(dllimport)
extern " c "//按原样编译
{
DllAPI int __stdcall Max(int a,int b);//__stdcall启用非C/C++语言中的API调用。
}
#endif
3.将DllDemo.h文件导入到DllDemo.cpp文件中,实现Max(int,int)函数。
#包含" DllDemo.h "
DllAPI int __stdcall Max(int a,int b)
{
if(a==b)
返回NULL
else if(a÷b)
返回a;
else
return b;
}
4.编译程序生成动态链接库。
第二,用DllDemo.dll创建动态链接库。def文件。
1.删除DllDemo项目中的DllDemo.h文件。
2.在DllDemo.cpp文件的开头,删除# include dllddemo.h语句。
3.向项目中添加一个文本文件,将其命名为DllDemo.def,并编写以下语句:
库MyDll
EXPORTS
Max@1
4.编译程序生成动态链接库。
链接的动态调用步骤:
1.隐式调用
1.建立DllCnslTest项目
2.将文件DllDemo.lib和DllDemo.lib复制到DllCnslTest项目所在的目录中。
3.在DllCnslTest.h中添加以下语句:
# define dll API _ _ declspec(dllimport)
#pragma comment(lib," dllddemo.lib ")//链接编辑器时,链接到dllddemo . lib文件。
外部“C”
{
DllAPI int __stdcall Max(int a,int b);
}
4.在DllCnslTest.cpp文件中添加以下语句:
# include " dll cntest . h "//或# include "dllddemo.h "
void main()
{
int value;
value = Max(2,9);
printf("最大值为%d\n ",value);
}
5.编译并生成应用程序DllCnslTest.exe。
第二,显式调用
1.建立DllWinTest项目
2.将文件DllDemo.dll复制到DllWinTest项目所在的目录或Windows系统目录下。
3.用vc/bin下的Dumpbin.exe小程序检查DLL文件(DllDemo.dll)中的函数结构。
4.使用类型定义关键字typedef定义指向与DLL中相同的函数原型的指针。
示例:
typedef int(*lpMax)(int a,int b);//此语句可以放在。h文件
5.通过LoadLibray()将DLL加载到当前应用程序中,并返回当前DLL文件的句柄。
示例:
HINSTANCE hDll//声明一个Dll实例文件句柄
hDll = LoadLibrary(" dll demo . dll ");//导入DllDemo.dll动态连接库
6.通过GetProcAddress()函数获取导入到应用程序中的函数指针。
示例:
lpMax Max
Max =(LP Max)GetProcAddress(hDLL," Max ");
int值;
value = Max(2,9);
printf("最大值为%d ",value);
7.调用该函数后,使用FreeLibrary()卸载DLL文件。
免费图书馆(hDll);
8.编译并生成应用程序DllWinTest.exe。
注意:显式链接的应用程序在编译时不需要使用相应的Lib文件。
位律师回复
0条评论