在新建对话框上放置2个按钮(隐式和显式调用dll)和1个编辑框(连接变量m_exp),添加按钮响应代码如下(隐式调用时:dll文件要放在对应目录[系统目录或者程序目录]下):
void CCalcTestDlg::OnButtonYinshi()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_exp.IsEmpty())
{
AfxMessageBox("请先输入四则运算表达式:");
return;
}
if(!TestExp(m_exp))
{
AfxMessageBox("格式错,请输入类似 \n -(-5+3*2)/2+1 \n这样的四则表达式");
return;
}
HMODULE hDll=::LoadLibrary(".\\Calc.dll");//加载链接库
if(hDll==NULL){
MessageBox("找不到Calc.dll,加载动态链接库失败","Warning",MB_OK|MB_ICONWARNING);
return;}
typedef double (*pShow)(const char *);
pShow Show=(pShow)::GetProcAddress(hDll,"Calc");
if(Show==NULL)
MessageBox("函数调用失败","Warning",MB_OK|MB_ICONWARNING); //调用加载动态链接库失败
else
m_exp.Format("%f",Show(m_exp));
FreeLibrary(hDll);
UpdateData(false);
}
void CCalcTestDlg::OnButtonXian()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_exp.IsEmpty())
{
AfxMessageBox("请先输入四则运算表达式:");
return;
}
if(!TestExp(m_exp))
{
AfxMessageBox("格式错,请输入类似 \n -(-5+3*2)/2+1 \n这样的四则表达式");
return;
}
CString filter,strPath;
filter="Dll(*.dll)|*.dll||";
CFileDialog dlg(TRUE,NULL,"Calc.dll",OFN_HIDEREADONLY,filter);
if(dlg.DoModal()==IDOK)
strPath=dlg.GetPathName();
HMODULE hDll=::LoadLibrary(strPath);//加载链接库
if(hDll==NULL){
MessageBox("加载动态链接库失败","Warning",MB_OK|MB_ICONWARNING);
return;}
typedef double (*pShow)(const char []);
pShow Show=(pShow)::GetProcAddress(hDll,"Calc");
if(Show==NULL)
MessageBox("函数调用失败","Warning",MB_OK|MB_ICONWARNING); //调用加载动态链接库失败
else
m_exp.Format("%f",Show(m_exp));
FreeLibrary(hDll);
UpdateData(FALSE);
}
bool CCalcTestDlg::TestExp(const char *str)
{
char ch;
int len=strlen(str),i=0;
while(len)
{
ch=*(str+i++);
if(i==len+1)
return true;
if(ch>='0' &&ch<='9' || ch=='+' || ch=='-' || ch=='*' ||ch=='/' ||ch=='(' ||ch==')')
;
else
return false;
}
return true;
}
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_exp.IsEmpty())
{
AfxMessageBox("请先输入四则运算表达式:");
return;
}
if(!TestExp(m_exp))
{
AfxMessageBox("格式错,请输入类似 \n -(-5+3*2)/2+1 \n这样的四则表达式");
return;
}
HMODULE hDll=::LoadLibrary(".\\Calc.dll");//加载链接库
if(hDll==NULL){
MessageBox("找不到Calc.dll,加载动态链接库失败","Warning",MB_OK|MB_ICONWARNING);
return;}
typedef double (*pShow)(const char *);
pShow Show=(pShow)::GetProcAddress(hDll,"Calc");
if(Show==NULL)
MessageBox("函数调用失败","Warning",MB_OK|MB_ICONWARNING); //调用加载动态链接库失败
else
m_exp.Format("%f",Show(m_exp));
FreeLibrary(hDll);
UpdateData(false);
}
void CCalcTestDlg::OnButtonXian()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_exp.IsEmpty())
{
AfxMessageBox("请先输入四则运算表达式:");
return;
}
if(!TestExp(m_exp))
{
AfxMessageBox("格式错,请输入类似 \n -(-5+3*2)/2+1 \n这样的四则表达式");
return;
}
CString filter,strPath;
filter="Dll(*.dll)|*.dll||";
CFileDialog dlg(TRUE,NULL,"Calc.dll",OFN_HIDEREADONLY,filter);
if(dlg.DoModal()==IDOK)
strPath=dlg.GetPathName();
HMODULE hDll=::LoadLibrary(strPath);//加载链接库
if(hDll==NULL){
MessageBox("加载动态链接库失败","Warning",MB_OK|MB_ICONWARNING);
return;}
typedef double (*pShow)(const char []);
pShow Show=(pShow)::GetProcAddress(hDll,"Calc");
if(Show==NULL)
MessageBox("函数调用失败","Warning",MB_OK|MB_ICONWARNING); //调用加载动态链接库失败
else
m_exp.Format("%f",Show(m_exp));
FreeLibrary(hDll);
UpdateData(FALSE);
}
bool CCalcTestDlg::TestExp(const char *str)
{
char ch;
int len=strlen(str),i=0;
while(len)
{
ch=*(str+i++);
if(i==len+1)
return true;
if(ch>='0' &&ch<='9' || ch=='+' || ch=='-' || ch=='*' ||ch=='/' ||ch=='(' ||ch==')')
;
else
return false;
}
return true;
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)