欢迎访问 Lu程序设计

C/C++使用Lu脚本字符串

1 说明

    要演示本文的例子,你必须下载Lu64脚本系统。本文的例子需要lu64.dll、lu64.lib、C格式的头文件lu64.h,相信你会找到并正确使用这几个文件。

    用C/C++编译器创建一个控制台应用程序,复制本文的例子代码直接编译运行即可。

2 关于Lu字符串

    Lu脚本系统默认字符串是unicode字符串。Lu字符串有两种,静态字符串(luStaData_string类型)和动态字符串(luDynData_string类型),详细参考Lu编程指南

    Lu动态字符串是一种动态对象,参考C格式的头文件lu64.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 "lu64.h"

#pragma comment( lib, "lu64.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-2021,保留所有权利
E-mail: forcal@sina.com
  QQ:630715621
最近更新: 2021年05月23日