欢迎访问 Lu程序设计
C/C++使用Lu脚本字符串
1 说明
要演示本文的例子,你必须下载Lu32脚本系统。本文的例子需要lu32.dll、lu32.lib、C格式的头文件lu32.h,相信你会找到并正确使用这几个文件。
用C/C++编译器创建一个控制台应用程序,复制本文的例子代码直接编译运行即可。
2 关于Lu字符串
Lu脚本系统默认字符串是unicode字符串。Lu字符串有两种,静态字符串(luStaData_string类型)和动态字符串(luDynData_string类型),详细参考Lu编程指南。
Lu动态字符串是一种动态对象,参考C格式的头文件lu32.h,其结构定义如下:
//luDynData_string(动态字符串)
struct luString
{
wchar_t *Str; //不会为NULL
luVOID Len; //字符串缓冲区长度
};
设pStr是一个luString类型的指针,验证方法为:
SearchKey((char *)&pStr, sizeof(luVOID), luDynData_string); //返回指向键值(动态对象)的指针,或者返回NULL。
Lu静态字符串是Lu表达式(函数)中定义的字符串(直接在双引号"... ..."之间定义),详细参考Lu用户指南。由于Lu表达式可以动态生成或销毁,故Lu静态字符串是相对静态的,在使用前也需要验证,验证函数如下:
wchar_t * _stdcall GetStr(LuData *Str,void *hFor,luVOID *StrMax); //C定义
用法1:
Str:Lu基本数据指针。
hFor:从二级函数获得的表达式句柄。不能使用编译表达式得到的表达式句柄。
StrMax:返回字符串缓冲区最大长度。该参数必须为变量,不能为常量。
返回值:字符串指针。返回NULL表示操作失败。
注意:只能在二级函数中使用该函数,以后会给出例子。
用法2:
Str:Lu基本数据指针。
hFor:hFor=NULL。
StrMax:返回字符串缓冲区最大长度。该参数必须为变量,不能为常量。
返回值:字符串指针。返回NULL表示操作失败。
注意:字符串指针应及时使用。
说明:该函数既可获得luStaData_string类型的静态字符串,也可获得luDynData_string类型的动态字符串。
3 代码
#include <stdio.h> #include <locale.h> #include "lu32.h" #pragma comment( lib, "lu32.lib" ) void main(void) { void *hFor; //表达式句柄 luINT nPara; //存放表达式的自变量个数 LuData *pPara; //存放输入自变量的数组指针 luINT ErrBegin,ErrEnd; //表达式编译出错的初始位置和结束位置 int ErrCode; //错误代码 LuData Val; //Lu基本数据类型 luString *pDStr; //Lu动态字符串指针 wchar_t *pStr; //字符串指针 luVOID StrMax; //存放字符串缓冲区的大小 wchar_t ForStr[]=L"getstr(a,b)= a=\"Lu静态字符串!\", b=new[string,\"Lu动态字符串!\"]";//字符串表达式 if(!InitLu()) return; //初始化Lu setlocale(LC_ALL, "chs"); //设置可以输出中文 ErrCode=LuCom(ForStr,0,0,0,&hFor,&nPara,&pPara,&ErrBegin,&ErrEnd); //编译表达式 if(ErrCode) { printf("表达式有错误!错误代码: %d \n",ErrCode); } else { Val=LuCal(hFor,pPara); //计算表达式的值 //第一个返回参数 pStr=NULL; if(pPara[0].BType==luDynData_string) //Lu动态字符串 { pDStr=(luString *)SearchKey((char *)&(pPara[0].x), sizeof(luVOID), luDynData_string); pStr=pDStr->Str; } else if(pPara[0].BType==luStaData_string) //Lu静态字符串 { pStr=GetStr(pPara, NULL, &StrMax); } if(pStr) wprintf(L"%s\r\n",pStr); //第二个返回参数,无论静态字符串还是动态字符串,都使用GetStr做验证 pStr=GetStr(pPara+1, NULL, &StrMax); if(pStr) wprintf(L"%s\r\n",pStr); } FreeLu(); //释放Lu }
运行结果:
Lu静态字符串!
Lu动态字符串!
4 函数说明
本例用到了Lu的6个输出函数:初始化Lu的函数InitLu,释放Lu的函数FreeLu,编译表达式的函数LuCom、计算表达式的函数LuCal、查找键值函数SearchKey、获得字符串函数GetStr。从这里查看这些函数的说明:Lu编程指南。
5 难点分析
代码中的字符串表达式定义了一个函数getstr(a,b),该函数的两个自变量被重新赋值,用于返回参数值,本例中返回了两个字符串。Lu脚本函数的自变量既可用于输入参数,也可用于输出参数,非常灵活。
在Lu表达式中,Lu静态字符串直接在双引号"... ..."之间定义,而动态字符串通常用函数new[string, ... ...]生成。
6 其他
你可能注意到了,我的联系方式就在下面,如有不明之处或有什么建议,可随时与我进行联系。
版权所有© Lu程序设计 2002-2013,保留所有权利
E-mail: forcal@sina.com QQ:630715621
最近更新: 2013年12月31日