DLL 非常简单!第三部分






4.57/5 (99投票s)
2004年9月30日
2分钟阅读

238247

5890
本文档描述了如何使用 DEF 文件创建 DLL 并使用它。
引言
在“DLL 简单!”系列文章的第三部分中,我将描述如何使用 DEF 文件创建 DLL。什么是 DEF 文件?它是一个模块定义 (*.def) 文件,是一个文本文件,包含一个或多个模块语句,描述了 DLL 的各种属性,包括
LIBRARY 语句 | 语句将 DEF 文件标识为属于 DLL |
EXPORTS 语句 | 列出 DLL 导出的函数名称 |
DESCRIPTION 语句 | 描述 DLL 的用途(可选) |
LIBRARY "DefExported"
DESCRIPTION 'DefExported For Present in CodeProject'
EXPORTS
Multiply @1
如何使用 DEF 文件构建 DLL
- 运行 VC++。
- 选择 文件>新建。
- 在对话框中,选择“MFC AppWizard (DLL)”并命名它,例如
DefExported
。 - 声明一个成员函数
public: int Multiply(int PartOne,int PartTwo); CDefExportedApp();
- 然后定义它
int CDefExportedApp::Multiply(int PartOne, int PartTwo) { return PartOne*PartTwo; }
- 在“文件视图”选项卡中,单击“源文件”并双击 DefExported.def.
- 在
EXPORT
语句之后,输入[函数名称] @[数字]
,如下所示LIBRARY "DefExported" DESCRIPTION 'DefExported For Present in CodeProject' EXPORTS ; Explicit exports can go here Multiply @1
- 单击“生成”按钮。
- 将 DLL 从烤箱中取出!!
如何使用 DLL
要动态使用 DLL,有三个简单的 API 函数
LoadLibrary ( [DLL 的路径] )
将 DLL 加载到进程地址空间,并返回指向 DLL 的句柄。GetProcAddress ( [已加载的库] , [函数名称] )
返回一个函数的句柄,以便在您的应用程序中使用它。FreeLibrary( [已加载 DLL 的句柄] )
释放加载 DLL 时分配的内存。
- 运行 VC++。
- 从菜单中选择 文件>新建。
- 在对话框中,选择“MFC AppWizard (EXE)”并命名它,例如
DynamicLoad.
- 选择“基于对话框”并单击“完成”按钮。
- 在对话框上放置一个按钮控件,然后双击它以创建其单击事件。
- 在键入按钮单击 (
BN_CLICKED
) 事件的代码之前,我们必须根据上面导出的函数的参数定义一个新的函数指针,参数数量正确。typedef int (CALLBACK* LPFNMLTPLY)(int, int);
Sometimes you have to convert some variable types. For more information about this conversion, see Microsoft Support Article ID: Q117428.
- 输入按钮单击事件的代码
HINSTANCE hClcltr=LoadLibrary("DefExported.dll"); LPFNMLTPLY lpfnMuliply; lpfnMuliply = (LPFNMLTPLY)GetProcAddress(hClcltr,"Multiply");
- 现在我们可以通过调用
lpfnMultiply
并存储返回值来使用Multiply
函数。m_Rslt=lpfnMuliply(m_PartOne,m_PartTwo);
- 完成使用库后,必须调用
FreeLibrary
API 以释放从LoadLibrary
方法分配的内存。FreeLibrary( hClcltr );
历史
- 2004 年 9 月 30 日 -- 发布原始版本