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
#include
#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<
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<
else
cout<
uselu(0); //歸還lu的使用權
freemlu(); //釋放mlu
結果:3 請按任意鍵繼續. . .
2 顯式載入例子
該例子需要以下支援檔案:
(1)標頭檔案lu32.h。
(2)核心庫lu32.dll和模組化編譯執行庫mlu32.dll。
#include
#include
#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<
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<
return false;
//以下幾個語句獲取lu32.dll的輸出函式
pgetfor=(lugetfor) pgetluproc("getfor");
plucal=(lulucal) pgetluproc("lucal");
return true;
void thefreemlu(void) //釋放mlu
pfreemlu(); //釋放mlu申請的空間
freelibrary(hmlu); //釋放動態庫
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(!theinitmlu()) return; //初始化mlu
if(!puselu(2)) //申請使用lu資源
i=pcommodule(forstr,nmodule,hmodule,errbegin,errend); //編譯lu源程式
if(i)
cout<
else
if(pgetfor(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=plucal(hfor,ppara); //計算表示式的值
cout<
else
cout<
puselu(0); //歸還lu的使用權
thefreemlu(); //釋放mlu
結果:3 請按任意鍵繼續.
摘自 forcal的專欄
C C 程式呼叫shell命令
c c 程式呼叫shell命令可以通過以下函式實現 1 file popen const char command const char mode 過程 popen 會呼叫fork 產生子程序,然後從子程序中呼叫 bin sh c來執行引數command的指令。引數mode可使用r代表讀取,w代表寫...
matlab練習程式(c c 呼叫matlab)
就我目前了解的c 呼叫matlab有兩種方法。第一種是通過matlab引擎呼叫,也就是這裡用到的方法。第二種是用matlab將m檔案編譯為相應的h lib dll檔案再加以呼叫。使用engine所用到的h和lib檔案基本在d program files matlab r2010b extern裡面,...
C C 呼叫Python程式的List列表介面
該介面檔案為屬於python2.7的include python2.7 listobject.h。這裡的 刪除了原有的注釋。在linux中,可以使用如下的命令找到相關的檔案 sudo find grep listobject.h grep python2.7關於python3的版本,不在此處列舉。i...