第一步、新建一个普通的win32dll
菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“UseDlg”。在这里我选择“A simple DLL project”,此时在VC++界面上会有一个树形文件结构。
第二步、为此dll添加一个Dialog资源
菜单项“Insert”——>“Resource”——>“Dialog”——>“New”。将此Dialog上的Cancel按钮去掉,右键“Properties”修改ID为IDD_DLG_SHOW。再添加一个ID为IDD_ABOUTBOX的对话框,其Caption为About,将资源文件命名为UseDlg.rc保存。并将resource.h和UseDlg.rc加入到工程里面(“Project”——>“Add to Project”——>“Files”——>“选择resource.h和UseDlg.rc”——>确定)。
第三步、编辑.cpp文件导出函数;
此时在VC++界面上文件结构如下。
在UseDlg.app中引入resource.h,完整代码如下代码:
#include "stdafx.h"
#include "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;
}
此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“UseDlg.dll”的文件。