论坛首页 编程语言技术论坛

How to create c extension for lua and pass complex structure step by step

浏览 2440 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-24   最后修改:2009-11-24

Original link: http://sunxiunan.com/?p=1498

 

You could download the project from http://groups.google.com/group/lua5/web/luautil.rar

At first, create a windows dll application. The IDE I used is VC2008.

 

I suggest you download and install the "Lua for windows " from luaforge.net, it contains most useful packages for Lua windows development. You could copy "include" and "lib" directory under the installation directory to your project.

 

 

image

 

In the beginning, you should include Lua header files.

 

Please note, you should use extern "C" to declare the header for Lua. In linker’s input, set the lua51.lib.

 

image

 

The project should have a function like luaopen_xxx (in my code, it is luaopen_luautil), and have strings=>functions map structure like "lua_util". Then you could call your extension like require "luautil".

 

image

 

The L_MSleep will call windows’ api Sleep().

 

Another function L_NewTable will generate a complex table for Lua script. It will call lua_settable() and lua_setfield() function to manipulate the table in Lua. lua_pushstring() and lua_pushnumber() could push string type and number type data to Lua. You could find the document about these functions in Lua 5.1 manual.

 

image

 

The table that Lua get will like:

 

local table1 = { 
           userName1 = "hahaha", 
           serialNumber1 = "1234613423", 
           tbl = {userName2 = "wwwww", serialNumber2 = "asdfasdadf", "5566", "wowowo"}}

 

After you build the project, copy the dll to lua installation folder "lua\5.1\clibs".

 

In the end, we could test the extension like:

 

require "luautil"
 local newtable =luautil.newtable()

for k, v in pairs(newtable) do
            print(k, v)
            if type(v) == "table" then
                for k2, v2 in pairs(v) do
                    print("–", k2, v2)
               end
           end
        end

 

– sleep 5 seconds.
 luautil.msleep(5000)

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics