在DLL中使用资源(一)

 
DLL中使用资源(一)

       CSDN论坛上最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLLMFC DLL两个方面来分析并解决这个问题。

1Win32 DLL

       Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogBox或者CreateDialog这两个函数(或相同作用的其它函数)来创建对话框,并定义你自己的对话框回调函数处理对话框收到的消息。下面通过一个具体实例来学习如何在Win32 DLL中使用对话框,可以按照以下步骤来完成这个例子:

 

1)在VC菜单中File->New新建一个命名为UseDlgWin32 Dynamic-Link Library工程,下一步选择A simple DLL project

 

2)在VC菜单中Insert->Resource添加一个IDIDD_DLG_SHOWDialog资源,将此Dialog上的Cancel按钮去掉,仅保留OK按钮。再添加一个IDIDD_ABOUTBOX的对话框,其CaptionAbout。保存此资源,将资源文件命名为UseDlg.rc。并将resource.hUseDlg.rc加入到工程里面。

 

3)在UseDlg.app中包含resource.h,并添加如下代码:

 

HINSTANCE hinst = NULL;

HWND hwndDLG = NULL;

 

BOOL CALLBACK DlgProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam);

BOOL CALLBACK AboutProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam);

extern "C" __declspec(dllexport) void ShowDlg();

 

BOOL APIENTRY DllMain( HANDLE hModule,

                       DWORD  ul_reason_for_call,

                       LPVOID lpReserved

                                    )

{

       switch(ul_reason_for_call)

       {

       case DLL_PROCESS_ATTACH:

              hinst = (HINSTANCE)hModule;

       case DLL_PROCESS_DETACH:

              break;

       }

    return TRUE;

}

 

extern "C" __declspec(dllexport) void ShowDlg()

{

       hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_DLG_SHOW),

NULL,(DLGPROC)DlgProc);

       ShowWindow(hwndDLG, SW_SHOW);

}

 

BOOL CALLBACK DlgProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam)

{

    switch(message)

    {

       case WM_INITDIALOG:

              return TRUE;

             

       case WM_COMMAND:

              if(LOWORD(wParam)==IDOK)

DialogBox(hinst,MAKEINTRESOURCE(IDD_ABOUTBOX),

hDlg,(DLGPROC)AboutProc);

              return TRUE;        

       case WM_CLOSE:

              DestroyWindow(hDlg);

              hwndDLG = NULL;

              return TRUE;

    }

    return FALSE;

}

 

BOOL CALLBACK AboutProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam)

{

       switch(message)

    {

              case WM_CLOSE:

                     EndDialog(hDlg,NULL);

                     hwndDLG = NULL;

                     return TRUE;

    }

    return FALSE;

}

 

4)编译生成UseDlg.dllUseDlg.lib

 

接下来我们建立调用此DLL的应用程序,其步骤如下:

 

1)在VC菜单中File->New新建一个命名为UseMFC AppWizard(exe)工程,下一步选择Dialog Based之后点击Finish按钮。

 

2)在主对话框上面添加一个按钮,之后双击此按钮,会弹出Add Member Function的对话框,直接点击OK进入void CUseDlg::OnButton1()函数。并在此函数内添加一个函数调用:ShowDlg();

 

3)紧跟在#include语句后面加上如下代码:

 

extern "C" __declspec(dllexport) void ShowDlg();

#pragma comment(lib,"debug/UseDlg")

 

4)将上面UseDlg工程中生成的UseDlg.dllUseDlg.lib两个文件复制到Use工程的Debug目录内。

 

5)编译生成Use.exe

 

       运行Use.exe,点击Button1按钮,可以看到一个名称为Dialog的非模态对话框弹出。点击上面的按钮,可以弹出模态对话框About。运行成功。

 

       让我们来回顾一下在Win32 DLL中使用对话框的过程。

 

DLL中,我们定义了两个对话框资源:IDD_DLG_SHOWIDD_ABOUTBOX,并且导出了函数ShowDlg。在函数ShowDlg之中使用CreateDialog函数创建了非模态对话框IDD_DLG_SHOW,并指定了该对话框的回调函数DlgProc。在DlgProc之中处理了WM_INITDIALOGWM_COMMANDWM_CLOSE消息,以响应用户对对话框所做的动作。在处理按钮动作的时候,使用DialogBox函数创建IDD_ABOUTBOX这个模态对话框,指定其回调函数为AboutProc,并且在AboutProc中处理其相应消息。

 

EXE中,我们使用隐式链接的方法来调用DLL,并使用DLL中导出的ShowDlg函数来调用DLL中的对话框。

 

       Win32 DLL中使用对话框就是这么简单,下面让我们来看一下在MFC DLL中如何使用对话框。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值