欢迎访问 Lu程序设计
C/C++注册常量或函数到Lu系统
1 说明
要演示本文的例子,你必须下载Lu32脚本系统。本文的例子需要lu32.dll、lu32.lib、C格式的头文件lu32.h,相信你会找到并正确使用这几个文件。
用C/C++编译器创建一个控制台应用程序,复制本文的例子代码直接编译运行即可。
2 关于常量和函数
使用Lu的输出函数SetConst可以往Lu中添加常量,本例中只添加了一个实型常量Real_10。使用Lu的输出函数SetFunction可以往Lu中添加二级函数,本例中只添加了一个二级函数add。这两个函数的用法参考Lu编程指南。
3 代码
#include <stdio.h> #include "lu32.h" #pragma comment( lib, "lu32.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-2013,保留所有权利
E-mail: forcal@sina.com QQ:630715621
最近更新: 2013年12月28日