C/C++使用Lu扩展动态库
欢迎访问 Lu程序设计
C/C++使用Lu扩展动态库
1 说明
要演示本文的例子,你必须下载Lu32脚本系统。本文的例子需要lu32.dll、lu32.lib、C++格式的头文件lu32.h,相信你会找到并正确使用这几个文件。
用C/C++编译器创建一个控制台应用程序,复制本文的例子代码直接编译运行即可。
2 关于Lu扩展动态库的使用
Lu扩展动态库只有一个输出函数:
//Lu扩展动态库唯一的输出函数; //hLu:Lu32.dll的句柄;iInit!=0:初始化动态库,iInit=0:释放动态库; //me:指向任意数据的指针,可用于验证用户能否使用该库,为了方便验证,约定该指针指向一个wchar_t类型的字符串。 //iInit!=0时,返回值LuDll=0:初始化失败;LuDll=1:初始化成功;返回值LuDll=2:初始化成功,仅注册一些常量,初始化完成后可卸载该库。 //iInit=0时,返回值LuDll=0:释放失败;LuDll=1:释放成功; extern "C" int _stdcall LuDll32(HINSTANCE hLu,int iInit,void *me) { . . . if(iInit) //初始化动态库 { . . . return 1; } else //释放动态库 { . . . return 1; } }
所以加载Lu扩展动态库后,调用函数LuDll32(hLu, 1, me)即可完成初始化工作,使用完该库后,调用函数LuDll32(hLu, 0, NULL)即可完成释放工作。
3 代码
#include <windows.h> #include <iostream> #include "lu32.h" #pragma comment( lib, "lu32.lib" ) using namespace std; void main(void) { void *hFor; //表达式句柄 luINT nPara; //存放表达式的自变量个数 LuData *pPara; //存放输入自变量的数组指针 LuData Val; //存放表达式的值 luINT ErrBegin,ErrEnd; //表达式编译出错的初始位置和结束位置 int ErrCode; //错误代码 wchar_t ForStr[]=L"Add(1.1,2.2)+Sub(6.6,5.5)+pi"; //字符串表达式 HINSTANCE hLu; //核心库lu32.dll句柄 HINSTANCE hDllExample; //扩展库DllExample.dll句柄 luDll pluDll; //Lu扩展库唯一的输出函数 if(!InitLu()) return; //初始化Lu hLu=GetModuleHandle(L"lu32.dll"); //获得核心库lu32.dll的句柄 hDllExample=LoadLibrary(L"DllExample.dll"); //加载动态库DllExample.dll if(hDllExample) { //获得扩展库DllExample唯一的输出函数 pluDll=(luDll)GetProcAddress(hDllExample,"LuDll32"); if(pluDll) { if(!pluDll(hLu,1,NULL)) //初始化失败 { FreeLibrary(hDllExample); //释放动态库DllExample.dll hDllExample=NULL; } } } ErrCode=LuCom(ForStr,0,0,0,hFor,nPara,pPara,ErrBegin,ErrEnd); //编译表达式 if(ErrCode) { cout<<"表达式有错误!错误代码:"<<ErrCode<<endl; } else { Val=LuCal(hFor,pPara); //计算表达式的值 if(Val.BType==luStaData_double) cout << *(double *)&(Val.x) << endl; } if(hDllExample) { pluDll(hLu,0,NULL); //释放Lu扩展库 FreeLibrary(hDllExample); //释放动态库DllExample.dll } FreeLu(); //释放Lu }
运行结果:
7.5416
4 函数说明
本例用到了Lu的4个输出函数:初始化Lu的函数InitLu,释放Lu的函数FreeLu,编译表达式的函数LuCom、计算表达式的函数LuCal。从这里查看这些函数的说明:Lu编程指南。
5 难点分析
要演示本文的代码,需要加载上篇教程代码生成的DllExample.dll,参考上一篇教程用C/C++设计Lu扩展动态库。
在Lu32脚本系统中,已经实现的主要Lu扩展库参考Lu脚本系统说明,源代码下载:lu1code.rar,用户可根据需要加载使用它们。
6 其他
你可能注意到了,我的联系方式就在下面,如有不明之处或有什么建议,可随时与我进行联系。
版权所有? Lu程序设计 2002-2013,保留所有权利
E-mail: [email protected] QQ:630715621
最近更新: 2014年01月16日
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。