正在阅读:VC++动态链接库(DLL)编程深入浅出(三)VC++动态链接库(DLL)编程深入浅出(三)

2005-09-23 09:57 出处:PConline 作者:宋宝华 责任编辑:moningfeng

  尤其值得特别注意,在DLL和EXE中我们对图13和图14的对话框使用了相同的资源ID=2000,在DLL和EXE工程的resource.h中分别有如下的宏:

//DLL中对话框的ID

#define IDD_DLL_DIALOG 2000


//EXE中对话框的ID

#define IDD_EXE_DIALOG 2000


  与5.3节静态链接MFC DLL的规则DLL相同,我们还是在规则DLL中定义接口函数ShowDlg,原型如下:

#include "StdAfx.h"

#include "SharedDll.h"

void ShowDlg(void)

{

CDialog dlg(IDD_DLL_DIALOG); //打开ID为2000的对话框

dlg.DoModal();

}


  而为应用工程主对话框的“调用DLL”的单击事件添加如下消息处理函数:

void CSharedDllCallDlg::OnCalldllButton()

{

ShowDlg();

}


  我们以为单击“调用DLL”会弹出13所示DLL中的对话框,可是可怕的事情发生了,我们看到是图14所示EXE中的对话框!

  惊讶?

  产生这个问题的根源在于应用程序与MFC规则DLL共享MFC DLL(或MFC扩展DLL)的程序总是默认使用EXE的资源,我们必须进行资源模块句柄的切换,其实现方法有三:

  方法一 在DLL接口函数中使用:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品