欢迎访问 Lu程序设计
C/C++注册常量或函数到Lu系统
1 说明
要演示本文的例子,你必须下载Lu64脚本系统。本文的例子需要lu64.dll、lu64.lib、C格式的头文件lu64.h,相信你会找到并正确使用这几个文件。
用C/C++编译器创建一个控制台应用程序,复制本文的例子代码直接编译运行即可。
2 关于常量和函数
使用Lu的输出函数SetConst可以往Lu中添加常量,本例中只添加了一个实型常量Real_10。使用Lu的输出函数SetFunction可以往Lu中添加二级函数,本例中只添加了一个二级函数add。这两个函数的用法参考Lu编程指南。
3 代码
#include <stdio.h>
#include "lu64.h"
#pragma comment( lib, "lu64.lib")
//Lu脚本可调用的二级函数定义
LuData _stdcall Fun2_add(luINT mm,LuData *xx,void *vFor) //计算两个数的和,仅支持整数和实数加
{
LuData a;
if(xx->VType==luStaData_int64 && (xx+1)->VType==luStaData_int64)
{
a.BType=luStaData_int64; a.VType=luStaData_int64;
a.x=xx->x+(xx+1)->x;
}
else if(xx->VType==luStaData_double && (xx+1)->VType==luStaData_double)
{
a.BType=luStaData_double; a.VType=luStaData_double;
*(double *)&(a.x)=*(double *)&(xx->x)+(*(double *)&((xx+1)->x));
}
else
{
a.BType=luStaData_nil; a.VType=luStaData_nil; a.x=0;
}
return a;
}
void main(void)
{
void *hFor; //表达式句柄
luINT nPara; //存放表达式的自变量个数
LuData *pPara; //存放输入自变量的数组指针
luINT ErrBegin,ErrEnd; //表达式编译出错的初始位置和结束位置
int ErrCode; //错误代码
LuData Val; //Lu基本数据类型
wchar_t ForStr[]=L"add(2.5, Real_10)"; //字符串表达式
if(!InitLu()) return; //初始化Lu
Val.BType=luStaData_double; Val.VType=luStaData_double; *(double *)&(Val.x)=10.0; //定义实数常量
SetConst(L"Real_10",&Val); //设置实型常量
SetFunction(L"add",Fun2_add,1); //设置二级函数
ErrCode=LuCom(ForStr,0,0,0,&hFor,&nPara,&pPara,&ErrBegin,&ErrEnd); //编译表达式
if(ErrCode)
{
printf("表达式有错误!错误代码: %d \n",ErrCode);
}
else
{
Val=LuCal(hFor,pPara); //计算表达式的值
if(Val.BType==luStaData_int64) //根据返回值的类型做判断
{
printf("表达式的值是整数: %I64d \n",Val.x);
}
else if(Val.BType==luStaData_double)
{
printf("表达式的值是实数: %f \n",*(double *)&(Val.x));
}
else
{
printf("不可识别的返回值!\n",Val.x);
}
}
FreeLu(); //释放Lu
}
运行结果:
表达式的值是实数: 12.500000
4 函数说明
本例用到了Lu的6个输出函数:初始化Lu的函数InitLu,释放Lu的函数FreeLu,编译表达式的函数LuCom、 计算表达式的函数LuCal、注册常量函数SetConst、注册C/C++函数的函数SetFunction。从这里查看这些函数的说明:Lu编程指南。
5 难点分析
本例不算太难,因为注册常量或函数本身没什么难度。但二级函数的设计还有些技巧,例如在二级函数中怎样调用Lu脚本函数、如何使用各种动态对象、如何返回一些动态对象等,待以后的例子做介绍。
6 其他
你可能注意到了,我的联系方式就在下面,如有不明之处或有什么建议,可随时与我进行联系。
版权所有© Lu程序设计
2002-2021,保留所有权利
E-mail: forcal@sina.com
QQ:630715621
最近更新:
2021年05月23日