1 通过window桌面向导创建一个DLL,添加对话框,对应的类分别为CPLCDlg和CEFEMDlg在dll对应的cpp里面添加如下代码
extern "C" __declspec(dllexport) void ShowPLC()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPLCDlg plcDlg;
plcDlg.Create(IDD_DLG_PLC, NULL);
plcDlg.ShowWindow(SW_SHOW);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
extern "C" __declspec(dllexport) void ShowEFEM()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CEFEMDlg efemDlg;
efemDlg.Create(IDD_DLG_EFEM, NULL);
efemDlg.ShowWindow(SW_SHOW);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
2 添加两个对话框类的WM_CLOSE消息处理函数来结束上面的消息循环
void CPLCDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
PostQuitMessage(0);
CDialogEx::OnClose();
}
void CEFEMDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
PostQuitMessage(0);
CDialogEx::OnClose();
}
3 主对话框菜单处理事件
void CNanoViewView::OnToolPlc()
{
typedef void (WINAPI* TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary(_T("ZASCtrlLib.dll"));
if (hmod == NULL) { AfxMessageBox(_T("Fail")); }
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress(hmod, "ShowPLC");
if (lpproc != (TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod);
}
void CNanoViewView::OnToolEfem()
{
typedef void (WINAPI* TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary(_T("ZASCtrlLib.dll"));
if (hmod == NULL) { AfxMessageBox(_T("Fail")); }
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress(hmod, "ShowEFEM");
if (lpproc != (TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod);
}