当前位置:编程学习 > C/C++ >>

C/C++调用MLu的入门程序

 

  MLu是程序和Lu核心库之间的一个接口库,MLu会自动加载Lu核心库和动态加载多个Lu扩展库,简化了Lu系统的使用;MLu可对Lu源程序进行模块化编译,能够编译运行具有固定格式的源程序(字符串表达式),源程序中可以使用C++风格的注释。此外,MLu还提供了多个线程互斥地访问Lu资源的功能;提供了Lu运行监视器,以退出耗时较长的程序;提供在脚本中动态编译函数的功能;提供错误处理函数,实现错误(异常)处理的恢复模型等等。

 

1 隐式加载例子

 

    该例子需要以下支持文件:

 

    (1)头文件lu32.h。

    (2)导入库lu32.lib及mlu32.lib。

    (3)核心库lu32.dll和模块化编译运行库mlu32.dll。

 

 

#include <windows.h> 

#include <iostream> 

#include "lu32.h"           //Lu头文件 

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

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

using namespace std; 

void main(void) 

    void *hModule;      //模块句柄 

    luINT ErrBegin,ErrEnd;  //表达式编译出错的初始位置和结束位置 

    int i;          //错误代码 

    void *hFor;     //表达式句柄 

    luVOID nModule=0;       //表达式所在模块 

    void *vPara;        //存放输入自变量的数组指针 

    LuData *pPara;      //存放输入自变量的数组指针 

    luINT nPara;        //存放表达式的自变量个数 

    LuData Val;     //存放表达式的值 

    wchar_t ForStr[]=L"f(x)=x+1; :::ff(x,y)=f(x)+y;";   //Lu模块化源程序 

    if(!InitMLu()) return;  //初始化MLu 

    if(!UseLu(2))       //申请使用Lu资源 

    { 

        i=ComModule(ForStr,nModule,hModule,ErrBegin,ErrEnd);    //编译Lu源程序 

        if(i) 

        { 

            cout<<"Lu源程序有错误!错误代码:"<<i<<endl; 

        } 

        else 

        { 

            if(GetFor(L"ff",1,NULL,nModule,hFor,vPara,nPara))   //查找全局函数 

            { 

                pPara=(LuData *)vPara; 

                for(i=0;i<=nPara;i++)    //表达式自变量赋值,均赋值为1 

                { 

                    pPara[i].BType=luStaData_int64; pPara[i].VType=luStaData_int64; pPara[i].x=1; 

                } 

                Val=LuCal(hFor,pPara);  //计算表达式的值 

                cout<<Val.x<<endl; 

            } 

            else 

            { 

                cout<<"找不到指定的函数!"<<endl; 

            } 

        } 

        UseLu(0);       //归还Lu的使用权 

    } 

    FreeMLu();      //释放MLu 

 

    结果:

 

3

请按任意键继续. . .

 

2 显式加载例子

 

    该例子需要以下支持文件:

 

    (1)头文件lu32.h。

    (2)核心库lu32.dll和模块化编译运行库mlu32.dll。

 

 

#include <windows.h> 

#include <iostream> 

#include "Lu32.h" 

using namespace std; 

HINSTANCE hMLu=NULL;    //动态库MLu32.dll的句柄 

 

//MLu输出函数 

mluInitMLu pInitMLu; 

mluFreeMLu pFreeMLu; 

mluGetLuProc pGetLuProc; 

mluUseLu pUseLu; 

mluComModule pComModule; 

//Lu输出函数 

luGetFor pGetFor; 

luLuCal pLuCal; 

bool theInitMLu(void)   //初始化MLu 

    hMLu=LoadLibrary(L"MLu32.dll"); //加载动态库MLu32.dll 

    if(!hMLu) 

    { 

        cout<<"找不到MLu32.dll!请将该库放到WINDOWS的搜索路径内!"; 

        return false; 

    } 

    //以下几个语句获取MLu32.dll的输出函数 

    pInitMLu=(mluInitMLu) GetProcAddress(hMLu,"InitMLu"); 

    pFreeMLu=(mluFreeMLu) GetProcAddress(hMLu,"FreeMLu"); 

    pGetLuProc=(mluGetLuProc) GetProcAddress(hMLu,"GetLuProc"); 

    pUseLu=(mluUseLu) GetProcAddress(hMLu,"UseLu"); 

    pComModule=(mluComModule) GetProcAddress(hMLu,"ComModule"); 

    if(!pInitMLu()) //初始化MLu32.dll 

    { 

        FreeLibrary(hMLu);  //释放动态库 

        cout<<"MLu初始化失败!"; 

        return false; 

    } 

    //以下几个语句获取Lu32.dll的输出函数 

    pGetFor=(luGetFor) pGetLuProc("GetFor"); 

    pLuCal=(luLuCal) pGetLuProc("LuCal"); 

    return true; 

void theFreeMLu(void)   //释放MLu 

    pFreeMLu(); //释放MLu申请的空间 

  &n

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,