用C/C++设计Lu扩展动态库(二)

2014-11-24 08:06:32 · 作者: · 浏览: 1
////////////////// //Lu动态库唯一的输出函数 //iInit!=0时,进行初始化。LuDll32=0:初始化失败;LuDll32=1:初始化成功;LuDll32=2:初始化成功,仅注册一些常量,初始化完成后可卸载该库。 //iInit=0时,LuDll32=0:释放失败;LuDll32=1:释放成功。 extern "C" int _stdcall LuDll32(HINSTANCE hLU,int iInit,void *me) { int i; if(iInit) //初始化动态库 { hLu=hLU; pSetFunction=(luSetFunction) GetProcAddress(hLu,"SetFunction"); pSetConst=(luSetConst) GetProcAddress(hLu,"SetConst"); pDeleteKey=(luDeleteKey) GetProcAddress(hLu,"DeleteKey"); //注册二级函数 for(i=0;FunName[i][0];i++) { FunReg[i]=pSetFunction(FunName[i],FunCal[i],FunPara[i]) false:true; if(!FunReg[i]) MessageBox(NULL,FunName[i],L"DllExample 注册函数失败!",32); } //注册常量 LuData a; a.BType=luStaData_double; a.VType=luStaData_double; *(double *)&(a.x)=3.1416; pSetConst(L"pi",&a); return 1; } else //释放动态库 { //注销二级函数 for(i=0;FunName[i][0];i++) { if(FunReg[i]) pDeleteKey((char *)FunName[i],wcslen(FunName[i])*2,luKey_Function,NULL,0); } //注销常量 pDeleteKey((char *)L"pi",4,luKey_Const,NULL,0); return 1; } } ////////////////////////////////////////////////////二级函数定义 LuData _stdcall lu_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; } LuData _stdcall lu_Sub(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; }


4 函数说明

本例用到了Lu的3个输出函数:设置外部二级函数SetFunction、设置常量函数SetConst、删除一个键DeleteKey。从这里查看这些函数的说明:Lu编程指南。

5 难点分析

本文仅用来说明如何用C/C++设计Lu扩展动态库,并给出了一个简单例子,关于如何加载使用本文生成的DllExample.dll,参考下一篇教程C/C++使用Lu扩展动态库。

在Lu32脚本系统中,已经实现的主要Lu扩展库参考Lu脚本系统说明,源代码下载:lu1code.rar。

6 其他

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


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