能调试成功,全部归功于dangchanghe博客中下面链接的教程以及他的耐心解答,Thanks!
http://blog.csdn.net/dch4890164/archive/2009/08/14/4447439.aspx
之前曾经写过一个参照《programming in lua》书中的方法的quick & dirty的调用自己写的C函数的方法,现在的重点是自己实现一个和Lua中的其他库一样的完全自己的库,下面让我们来看看如何向lua中添加自己的C函数库吧。
首先,我的环境是:VC++2008 EXPRESS ; LUA5.1.4
下面看一下具体操作步骤:
1.首先,我们需要写一个自己的库文件,像下面这样:
#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
static int myfun(lua_State* L)
{
printf("myfun is succeed!");
return 0;
}
static const struct luaL_Reg mylib[] =
{
{"myfun",myfun},
{NULL,NULL}
};
LUALIB_API int luaopen_mylib(lua_State *L)
{
luaL_register(L,"mylib",mylib);
return 0;//没有返回值
}
我们将它保存为mylib.c,然后放到lua/src目录下。
2.我们需要在lua/src目录下的lualib.h中添加我们定义的函数库的宏,像下面这样:
#define LUA_MYLIBNAME "mylib"
LUALIB_API int (luaopen_mylib) (lua_State *L);
添加这句之后,我们把lua/src目录下的这个lualib.h 再拷贝一份到include目录下,覆盖即可。
3. 然后我们要修改 lua/src目录下的linit.c文件,将下面这句添加的lualibs这个数组中(在{null,null}之前):
{LUA_MYLIBNAME, luaopen_mylib},
4.打开mak.vs2005目录下的lua5.1.sln,然后右键点击lua5.1_dll导入我们自己的库mylib.c( 至少长河让我明白了lib和dll的区别 -_-!!! 因为我们现在需要用到的是动态库!),然后生成解决方案,如果没有错误的话,在我们的跟目录下会生成bin,obj等文件夹,我们到bin文件夹下,这里会有我们需要的lua5.1.exe
双击打开,然后输入如下语句:
require "mylib"
mylib.myfun()
如果它输出
myfun is succeed!
这代表我们已经成功将我们自己 mylib库添加到了Lua中!
(2005的工程可以成功,但是2008的工程编译总是出错,Lua5.1.exe总是无法生成,有一个
LINK : fatal error LNK1104: 无法打开文件“iupscripter.lib”
的错误,目前我只是使用的lua包中的那个2005的工程)