---- importing ---- if string.sub(_VERSION,1,7)=='Lua 5.0' then -- lua5.0 doesnt have a nice way to do this lib=loadlib('example.dll','luaopen_example') or loadlib('example.so','luaopen_example') assert(lib)() else -- lua 5.1 does require('example') end a = 37 b = 42 -- Now call our C function print("Trying some C functions") print(" a =", a) print(" b =", b) print(" add(a,b) =", example.add(a,b)) print(" sub(a,b) =", example.sub(a,b)) print(" mul(a,b) =", example.mul(a,b)) print("Calling them using the my_func()") print(" add(a,b) =", example.callback(a,b,example.add)) print(" sub(a,b) =", example.callback(a,b,example.sub)) print(" mul(a,b) =", example.callback(a,b,example.mul)) print("Now let us write our own function") function foo(a,b) return 101 end print(" foo(a,b) =", example.callback(a,b,foo)) print("Now let us try something that will fail") local ok,c=pcall(example.callback,a,b,print) if ok==false then print("this failed as expected, error:",c) else print("oops, that worked! result:",c) end -- part2 stored function print("trying a stored fn") print("the_func=",example.the_func) print("setting to print") example.the_func=print print("the_func=",example.the_func) print("call_the_func(5)") example.call_the_func(5) function bar(i) print("bar",i) end print("setting to bar") example.the_func=bar print("call_the_func(5)") example.call_the_func(5)