65,210
社区成员
发帖
与我相关
我的任务
分享#include <windows.h>
#include <cmath>
#include <iostream>
#include <iomanip>
#include "forcal32.h"
using namespace std;
HINSTANCE hForcal=NULL; //动态库Forcal32.dll的句柄;
//动态库输出函数;
fcInitForcal pInitForcal;
fcFreeForcal pFreeForcal;
fcRealCom pRealCom;
fcRealCal pRealCal;
bool InitForcal(void) //初始化Forcal;
{
hForcal=LoadLibrary("Forcal32.dll"); //加载动态库Forcal32.dll;
if(!hForcal)
{
cout<<"找不到Forcal32.dll!请将该库放到WINDOWS的搜索路径内!";
return false;
}
//以下几个语句获取Forcal32.dll中所调用函数的地址;
pInitForcal=(fcInitForcal) GetProcAddress(hForcal,"InitForcal");
pFreeForcal=(fcFreeForcal) GetProcAddress(hForcal,"FreeForcal");
pRealCom=(fcRealCom) GetProcAddress(hForcal,"RealCom");
pRealCal=(fcRealCal) GetProcAddress(hForcal,"RealCal");
if(!pInitForcal||!pFreeForcal||!pRealCom||!pRealCal)
{
cout<<"无效的动态库函数!"<<endl;
FreeLibrary(hForcal); //释放动态库Forcal32.dll;
hForcal=NULL;
return false;
}
pInitForcal(); //初始化Forcal32.dll;
return true;
}
void FreeForcal(void) //释放Forcal
{
pFreeForcal(); //释放Forcal申请的空间;
FreeLibrary(hForcal); //释放动态库;
}
void main(void)
{
void *vFor; //表达式句柄;
fcINT nPara; //存放表达式的自变量个数;
double *pPara; //存放输入自变量的数组指针;
fcINT ErrBegin,ErrEnd; //表达式编译出错的初始位置和结束位置;
int ErrCode; //错误代码;
char ForStr[]="1+2"; //字符串表达式;可改为f(x)=1/(1+x^2),但要输入自变量,需更改这个例子。
if(!InitForcal()) return; //初始化Forcal;
vFor=0;
ErrCode=pRealCom(ForStr,0,vFor,nPara,pPara,ErrBegin,ErrEnd); //编译实数表达式;
if(ErrCode)
{
cout<<"表达式有错误!错误代码:"<<ErrCode<<endl;
}
else
{
cout<<pRealCal(vFor,pPara)<<endl; //计算实数表达式的值;
}
FreeForcal(); //释放Forcal;
}