lua 調用 dll 的簡單demo

windows下的 lua 與 c 進行交互, 本人新手,只能作到這麼多了windows

c代碼函數

//#include "stdio.h"
#include "windows.h"
#ifdef _cplusplus  
extern "C"{
#endif
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

extern  int  isquare(lua_State *L);
extern  int  alert(lua_State *L);
#ifdef _cplusplus
}
#endif

int luaopen_add(lua_State *L){
    lua_register(
            L,               /* Lua 狀態機 */
            "square",        /*Lua中的函數名 */
            isquare          /*當前文件中的函數名 */
            );  
   lua_register(L,"alert",alert);
//    lua_register(L,"cube",icube);
    return 0;
}


int alert(lua_State *L)
{
    const char * desc = lua_tostring(L,-1);
    MessageBox(NULL,desc,"alert",MB_OK);
    return 1;
}

int isquare(lua_State *L){              /* C中的函數名 */
    float rtrn = lua_tonumber(L, -1);      /* 從Lua虛擬機裏取出一個變量,這個變量是number類型的 */
    //printf("Top of square(), nbr=%f\n",rtrn);
    lua_pushnumber(L,rtrn*rtrn);           /* 將返回值壓回Lua虛擬機的棧中 */
    return 1;                              /* 這個返回值告訴lua虛擬機,咱們往棧裏放入了多少個返回值 */
}

編譯命令lua

cl /c add.c /I ../include

include 爲 lua 頭文件所在目錄spa

link /def:export.def /dll add.obj ../lua53.lib "kernel32.lib" "user32.lib" "gdi32.lib"

導出函數到 dllcode

export.defip

; export.def
LIBRARY ADD
; MY_DLLMAIN 將成爲生成的dll的名稱
DESCRIPTION  'test'
EXPORTS
    isquare  @ 1
    alert    @ 2
; 這個名稱即爲函數的實際導出名稱 @1爲函數的導出編號

lua虛擬機

square = package.loadlib("ADD.dll", "isquare")
alert=package.loadlib("ADD.dll", "alert")
print(alert)
print ( square(2) )
alert("222")

執行結果
clipboard.pngstring

雖然有亂碼存在問題,可是指望結果基本已經達到io

相關文章
相關標籤/搜索