⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 稿件模板.htm

📁 先编写MFC DLL
💻 HTM
字号:
<table width="145%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
      <p align="center"><b>VC++6.0动态链接库DLL的编写和调用(四则表达式计算)</b><br><br>
      作者:<a href="mailto:x828@163.com">杨建敏</a></p><a href="calc.rar">下载工程代码</a><br>
		<br>
 </p>
      <img border="0" src="calc0.jpg"><br>
      运行图示<br>
      <br>
  1、先编写MFC DLL,打开VC++6.0 => File => New => Project => MFC AppWizzard(dll),在 Project name 里<br>
		输入Calc =>Next => Finish. 好了,现在你打开Workspace的FileView就可以看到已经有Calc.h、Calc.cpp、<br>
		stdafx.h、stdafx.cpp这4个文件了。<br>
<br>2、我们只要向Calc.cpp里面加入dll函数代码就可以了,如下:
        
      <pre>
// Calc.cpp
#include &lt;math.h&gt;
#define N 20

extern "C" __declspec(dllexport) double Calc(const char exp[])
{
	char ch;	
	int add(2),sub(3),mul(4),div(5),op[20],nc(0),oc(0);
	double num[N],rel(0);	
	….//具体参见源代码		
	return num[0];
}</pre>
代码完毕,运行就可以了,会生成一个Calc.dll 文件(还有个Calc.lib,不过这个文件我们现在不用它的)<br>
		<br>
3、现在建立一个对话框工程(工程名CalcTest)来调用刚才我们编写的dll。在对话框界面上放置一个编辑框<br>
		(EditBox)和2个按钮(Button)分别用来接收表达式输入(显示结果)、隐式调用dll和显式
调用dll;并且为编辑<br>
		框连接一个变量m_exp. 代码如下:
//按钮1:隐式调用dll。<pre>
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;
	}
	//如果dll文件不在系统目录或者程序当前目录下,请更改下句的路径
	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);
}

//按钮2:实现显式调用dll(手动查找dll文件所在位置)
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;		
}
</pre>

		  好了,运行程序,输入四则表达式,若dll文件位置正确,隐式调用按钮马上可以得到运算结果,显式的需要<br>
		先弹出对话框查找calc.dll文件位置.(此程序暂时只支持带+-*/和负号、括号的整型四则运算,如果
你想要更<br>
		多的功能,你也可以自己添加数据类型的处理实现复杂运算)。<br>
		<br>
[若有运行问题,请联系 x828@163.com或者QQ93311240]
    </td>
  </tr>
</table>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -