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

前端之家收集整理的这篇文章主要介绍了cjson 融合lua,暴露全局变量,vs编译前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

  1. /* Lua CJSON floating point conversion routines */
  2.  
  3. /* Buffer required to store the largest string representation of a double.
  4. *
  5. * Longest double printed with %.14g is 21 characters long:
  6. * -1.7976931348623e+308 */
  7. #define FPCONV_G_FMT_BUFSIZE 32
  8. //使用内部的转换机制
  9. #define USE_INTERNAL_FPCONV
  10. //暴露cjson 为lua的全局对象使用就像使用os.clock()直接使用
  11. #define ENABLE_CJSON_GLOBAL
  12. //将inline 冲定义为 __inline
  13. #define inline __inline
  14. #ifdef USE_INTERNAL_FPCONV
  15. static inline void fpconv_init()
  16. {
  17. /* Do nothing - not required */
  18. }
  19. #else
  20. extern inline void fpconv_init();
  21. #endif
  22.  
  23. extern int fpconv_g_fmt(char*,double,int);
  24. extern double fpconv_strtod(const char*,char**);
  25.  
  26. /* vi:ai et sw=4 ts=4:
  27. */

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

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

  1. #include <assert.h>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <limits.h>
  5. #include "..\lua-5.1.4\src\lua.h" //lua文件的位置需要修改你自己的
  6. #include "..\lua-5.1.4\src\lauxlib.h" //lua文件的位置需要修改你自己的
  7.  
  8. #include "strbuf.h"
  9. #include "fpconv.h"
  10.  
  11. #ifndef CJSON_MODNAME
  12. #define CJSON_MODNAME "cjson"
  13. #endif
  14.  
  15. #ifndef CJSON_VERSION
  16. #define CJSON_VERSION "2.1.0"
  17. #endif
  18.  
  19. /* Workaround for Solaris platforms missing isinf() 下面这里是修复*/
  20. #include <float.h>
  21. #define isnan(x) ((x) != (x))
  22. #define isinf(x) (!_finite(x) && !_isnan(x))
  23. #define strncasecmp _strnicmp
  24. #define snprintf _snprintf

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

1、lualib.h里面添加

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

2、linit.c里修改

  1. static const luaL_Reg lualibs[] = {
  2. {"",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}
  3. };

猜你在找的Json相关文章