欢迎访问 Lu程序设计

C/C++接收Lu系统的字符串信息

1 说明

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

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

2 关于Lu系统的字符串信息

    Lu核心库的函数o以及许多注册到Lu的二级函数都将返回一些字符串信息,若要接收这些信息,需要注册一个luMessage类型的函数到Lu(用luPubKey_User类型的8字节串"\0\0\0\0\0\0\0\0"键标识),参考Lu编程指南

void _stdcall LuMessage(wchar_t *pWStr)  //输出Lu信息,该函数注册到Lu,由Lu及二级函数调用
{
    ... ...
}

    标识符luPubKey_User表示Lu键树中的公有键数据类型,公有键就是大家都可以访问的键,里面存的数据谁都可以访问,LuMessage函数是谁都可以用的,当然要注册为公有键了。有公有键当然就有私有键,私有键只能自己访问,以后会详细进行讨论,这里就不多说了。

    要使用InsertKey函数将LuMessage注册到Lu系统,格式如下:

void *NowKey;

... ...

InsertKey("\0\0\0\0\0\0\0\0",8,luPubKey_User,LuMessage,NULL,NULL,1,&NowKey); //使Lu运行时可输出函数信息

    为了方便移植,最好使用下面的代码:

void *NowKey;
luVOID k=0;  //32位平台上luVOID被定义为__int32;64位平台上luVOID被定义为__int64;k必须赋值为0

... ...

InsertKey((char *)&k,sizeof(luVOID),luPubKey_User,LuMessage,NULL,NULL,1,&NowKey); //使Lu运行时可输出函数信息

3 代码

#include <stdio.h>
#include <locale.h>
#include "lu64.h"

#pragma comment( lib, "lu64.lib" )

void _stdcall LuMessage(wchar_t *pch) //输出动态库信息,该函数注册到Lu,由Lu二级函数调用
{
	wprintf(L"%s",pch);
}
void main(void)
{
	void *hFor;		//表达式句柄
	luINT nPara;		//存放表达式的自变量个数
	LuData *pPara;		//存放输入自变量的数组指针
	luINT ErrBegin,ErrEnd;	//表达式编译出错的初始位置和结束位置
	int ErrCode;		//错误代码
	void *NowKey;		//返回已存在的键值
	luVOID k=0;		//32位平台上luVOID被定义为__int32;64位平台上luVOID被定义为__int64;k必须赋值为0
	wchar_t ForStr[]=L"o{\"o函数返回的信息:\",22,\" \",22.,\" \",2-3i,\" \",1$2$3,\" \",2>3}";//字符串表达式

	if(!InitLu()) return;	//初始化Lu

	InsertKey((char *)&k,sizeof(luVOID),luPubKey_User,LuMessage,NULL,NULL,1,&NowKey);//使Lu运行时可输出函数信息

	setlocale(LC_ALL, "chs");	//设置可以输出中文

	ErrCode=LuCom(ForStr,0,0,0,&hFor,&nPara,&pPara,&ErrBegin,&ErrEnd);	//编译表达式
	if(ErrCode)
	{
		printf("表达式有错误!错误代码: %d \n",ErrCode);
	}
	else
	{
		LuCal(hFor,pPara);	//计算表达式的值
	}
	FreeLu();			//释放Lu
}

运行结果:

o函数返回的信息:22 22. {(2.)$(-3.)} {(1.)$(2.)$(3.)} false

4 函数说明

    本例用到了Lu的5个输出函数:初始化Lu的函数InitLu,释放Lu的函数FreeLu,编译表达式的函数LuCom、 计算表达式的函数LuCal、插入键值函数InsertKey。从这里查看这些函数的说明:Lu编程指南

5 难点分析

    本例中函数InsertKey的用法是最复杂的,不过本例的用法比较简单。需要注意倒数第二个参数要设成非0值,否则有可能设置不成功。

    字符串表达式中的o函数是这样的:o{"o函数返回的信息:",22," ",22.," ",2-3i," ",1$2$3," ",2>3}

    o函数用于输出对象(object)的信息,本例输出了一些字符串和数据,其中22是整数;22.是实数;2-3i是复数;1$2$3是三维向量;2>3是逻辑值。o函数在输出复数和三维向量时,格式为{(2.)$(-3.)}和{(1.)$(2.)$(3.)},这是 一种Lu脚本可以直接进行编译的格式。

    如果将自己设计的对象注册到了Lu系统(仍然使用函数InsertKey),我们可以通过重载函数o来输出我们自己的对象信息,后续教程中就会讲到这方面的例子。

6 其他

    你可能注意到了,我的联系方式就在下面,如有不明之处或有什么建议,可随时与我进行联系。


版权所有© Lu程序设计 2002-2021,保留所有权利
E-mail: forcal@sina.com
  QQ:630715621
最近更新: 2021年05月23日