当前位置:C++技术网 > 资讯 > 示例程序详解win32动态链接库

示例程序详解win32动态链接库

更新时间:2015-11-03 22:05:51浏览次数:1+次

对于一些基础的的那个太链接库知识,请看《动态链接库基础详解》,然后再阅读本文。

创建通用的动态链接库:

选择win32 Dynamic-Link Library选项,创建一个CommonDll工程,名称Win32Dll。默认情况下会有一个DLLMain函数,该函数是动态链接库的入口函数,在加载动态链接库时将调用该函数。我们在工程中添加一个自定义的函数:

extern "C" _declspec(dllexport) void ShowNote(char *pszText)
{
	MessageBox(pszText,"提示");
}
编译并运行工程,将生成一个动态链接库文件-Win32Dll。

我们在Debug目录下就能找到了。

接着我们创建一个MFC程序(exe)-InvokeDll,基于对话框,创建完工程后,在对话框上添加一个“确定”“取消”按钮,我们在其文件夹中复制上一个CommonDll.dll文件。

然后我们在对话框类中添加一个模块句柄对象:

HMODULE m_hMod;
在对话框初始化函数中调用加载动态链接库函数:
BOOL CInvokeDllDlg::OnInitDialog()
{
	m_hMod=LoadLibrary("./Win32Dll.dll");
	return true;
}
我们定义一个函数指针类型,该函数的原型与动态链接库中的函数原型相同。
typedef void(*funShowNote)(char *pszText);
我们处理"确定"按钮的单击事件,调用GetProcAddress函数获取动态连接库中ShowNote函数的地址。
void CInvokeDllDlg::OnOk()
{
	funShowNote ShowNote;
	if(m_hMod)
	{
		ShowNote=(funShowNote)GetProcAddress(m_hMod,"ShowNote");
		if(ShowNote)
		{
			ShowNote("Win32Dll文件引入成功");
		}
	}
}

处理"取消"按钮的单击事件,在对话框关闭时释放加载的动态链接库句柄。

void CInvokeDllDlg::OnCancel()
{
	if(m_hMod)
	{
		FreeLibrary(m_hMod);
	}
	CDialog::OnCancel();
}
最后得实现: