欢迎访问 Lu程序设计
C/C++接收Lu系统的字符串信息
1 说明
要演示本文的例子,你必须下载Lu32脚本系统。本文的例子需要lu32.dll、lu32.lib、C格式的头文件lu32.h,相信你会找到并正确使用这几个文件。
用C/C++编译器创建一个控制台应用程序,复制本文的例子代码直接编译运行即可。
2 关于Lu系统的字符串信息
Lu核心库的函数o以及许多注册到Lu的二级函数都将返回一些字符串信息,若要接收这些信息,需要注册一个luMessage类型的函数到Lu(用luPubKey_User类型的4字节串"\0\0\0\0"键标识),参考Lu编程指南。
void _stdcall LuMessage(wchar_t *pWStr) //输出Lu信息,该函数注册到Lu,由Lu及二级函数调用
{
... ...
}
标识符luPubKey_User表示Lu键树中的公有键数据类型,公有键就是大家都可以访问的键,里面存的数据谁都可以访问,LuMessage函数是谁都可以用的,当然要注册为公有键了。有公有键当然就有私有键,私有键只能自己访问,以后会详细进行讨论,这里就不多说了。
要使用InsertKey函数将LuMessage注册到Lu系统,格式如下:
void *v; ... ... InsertKey("\0\0\0\0",4,luPubKey_User,LuMessage,NULL,NULL,1,v); //使Lu运行时可输出函数信息
为了方便由32位系统升级到64位系统,最好使用下面的代码:
void *v; luVOID k=0; //32位平台上luVOID被定义为__int32;64位平台上luVOID被定义为__int64;k必须赋值为0 ... ... InsertKey((char *)&k,sizeof(luVOID),luPubKey_User,LuMessage,NULL,NULL,1,v); //使Lu运行时可输出函数信息
3 代码
#include <stdio.h> #include <locale.h> #include "lu32.h" #pragma comment( lib, "lu32.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 *v=NULL; //为了避免编译器报错,初始化为NULL 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,v);//使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-2013,保留所有权利
E-mail: forcal@sina.com QQ:630715621
最近更新: 2013年12月28日