更新时间: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();
}
最后得实现:
相关资讯