加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cjson 融合lua,暴露全局变量,vs编译

发布时间:2020-12-16 18:55:32 所属栏目:百科 来源:网络整理
导读:将lua5.1.4源码下来之后导入vs中,然后能够编译为静态库即可,然后下载cjson的源码库,将里面的源码全部导入 1.lua-cjson-2.1.0fpconv.h 文件修改 /* Lua CJSON floating point conversion routines *//* Buffer required to store the largest string represe

将lua5.1.4源码下来之后导入vs中,然后能够编译为静态库即可,然后下载cjson的源码库,将里面的源码全部导入

1.lua-cjson-2.1.0fpconv.h 文件修改

/* Lua CJSON floating point conversion routines */

/* Buffer required to store the largest string representation of a double.
 *
 * Longest double printed with %.14g is 21 characters long:
 * -1.7976931348623e+308 */
#define FPCONV_G_FMT_BUFSIZE   32  
//使用内部的转换机制
#define USE_INTERNAL_FPCONV 
//暴露cjson 为lua的全局对象使用就像使用os.clock()直接使用
#define ENABLE_CJSON_GLOBAL
//将inline 冲定义为 __inline
#define inline __inline  
#ifdef USE_INTERNAL_FPCONV  
static inline void fpconv_init()  
{  
	/* Do nothing - not required */  
}  
#else  
extern inline void fpconv_init();  
#endif  

extern int fpconv_g_fmt(char*,double,int);  
extern double fpconv_strtod(const char*,char**);  

/* vi:ai et sw=4 ts=4:
 */

2.lua-cjson-2.1.0fpconv.c,在vs工程中remove掉这个文件

3.lua-cjson-2.1.0lua_cjson.c的前面添加如下代码:

#include <assert.h>
#include <string.h>
#include <math.h>
#include <limits.h>
#include "..lua-5.1.4srclua.h"  //lua文件的位置需要修改你自己的
#include "..lua-5.1.4srclauxlib.h"  //lua文件的位置需要修改你自己的

#include "strbuf.h"
#include "fpconv.h"

#ifndef CJSON_MODNAME
#define CJSON_MODNAME   "cjson"
#endif

#ifndef CJSON_VERSION
#define CJSON_VERSION   "2.1.0"
#endif

/* Workaround for Solaris platforms missing isinf() 下面这里是修复*/
#include <float.h>  
#define isnan(x) ((x) != (x))  
#define isinf(x) (!_finite(x) && !_isnan(x))  
#define strncasecmp  _strnicmp   
#define snprintf	_snprintf

上面都是cjson库里面的文件修改,现在我们需要lua库与cjson库融合在一起就得转到lua库中添加cjson的调用,主要修改如下:

1、lualib.h里面添加:

#define LUA_CJSONLIBNAME    "cjson"  
LUALIB_API int (luaopen_cjson) (lua_State *L); 

2、linit.c里修改

static const luaL_Reg lualibs[] = {
  {"",luaopen_base},{LUA_LOADLIBNAME,luaopen_package},{LUA_TABLIBNAME,luaopen_table},{LUA_IOLIBNAME,luaopen_io},{LUA_OSLIBNAME,luaopen_os},{LUA_STRLIBNAME,luaopen_string},{LUA_MATHLIBNAME,luaopen_math},{LUA_CJSONLIBNAME,luaopen_cjson},{LUA_DBLIBNAME,luaopen_debug},{NULL,NULL}
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读