VisualFreeBasic之所以能吸引我有几个原因

1、语法简单,跟VB的语法极度相似

2、生成的程序提交极小,空项目只有151K

3、勇芳封装了大量的WinAPI和自定义函数,可以大大的减轻程序员的工作量

4、只要开源的c/c++的项目,只要能使用mingw32/64进行编译,基本上都可以集成

5、支持自行开发插件、控件,而且本身就有很多恰到好处的控件

6、开发的IDE就是用VisualFreeBasic开发的

7、支持从WinXP到Win11全部的微软操作

8、线程可以安全的操作控件。。你没看错。。确实如此

作者主要的业务就是开发管理系统,管理系统必然涉及到API和Json的读写解析,在确定选用VisualFreeBasic之后就要考虑到接口通信协议使用的就是Json的读写问题。

在选型的时候我的主要方向如下

1、纯C开源(C++的项目需要链接stdc++库,这个库体积有点大)

2、可以支持mingw32/64编译

3、头文件少(fbfrog.exe转换.h头文件到.bi工作量会少很多)

4、github上Stars越多越好

综合考虑,能选择的就cJSON和json-c,其中后者在VisualFreeBasic已经集成,但是版本是1.20的,最后编译时间是2014年的1.12版本,最新版本已经是1.16,期间更新也不少。考虑到升级json-c的话,.h文件比较多,翻译是个大工程。而且cJSON的stars比json-c多几倍。

综上所述,暂时以编译cJSON为第一目标。

下载地址在

Release 1.7.15 · DaveGamble/cJSON · GitHub

编译静态库的方法很简单

编译方法很简单

打开MSSY2 x86执行

执行make static

在项目根目录就可以产生libcjson.a

如果需要编译x64的库文件,可以切换到MSSY2 x64再执行一次上面的操作。切记如果再次编译,需要先执行一次make clean

再使用fbfrog.exe cJSON.h -o cJSON.bi

再拷贝libcjson.a到VisualFreeBasic文件夹下的Compile\expand\lib\win32

再拷贝cJSON.bi到VisualFreeBasic文件夹下的Compile\expand\inc

新建一个exe的项目,在起始模块加入引入库和头文件

#inclib "cjson"
#include Once "cJSON.bi"

加入到把库和头文件加入到项目,再主窗体增加调用代码

Sub Form1_Shown(hWndForm As hWnd,UserData As Integer)Dim json As cJSON Ptr = cJSON_Parse("{""id"":1}")If json = NULL ThenMsgBox "解析异常"ReturnEnd IfPrint *(Cast(ZString Ptr, cJSON_Version())) '版本号返回的是Const ZString Ptr,得做一下转换,才能使用
End Sub

编译会提示错误

Error: 此引用未定义(一般是DLL定义出错) `__stack_chk_guard'

Error: 此引用未定义(一般是DLL定义出错) `__stack_chk_fail'

在顶层的Makefile里找到CFLAGS然后添加-fno-stack-protector标志!

其实这是传给GCC的一个编译选项。

-fno-stack-protector参数用来disable Stack-smashing protection

解决的办法是把makefile文件中

# validate gcc version for use fstack-protector-strong
MIN_GCC_VERSION = "4.9"
GCC_VERSION := "`$(CC) -dumpversion`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"CFLAGS += -fstack-protector-strong
elseCFLAGS += -fstack-protector
endif

修改为

# validate gcc version for use fstack-protector-strong
MIN_GCC_VERSION = "4.9"
GCC_VERSION := "`$(CC) -dumpversion`"
IS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
ifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"CFLAGS += -fno-stack-protector
elseCFLAGS += -fno-stack-protector
endif

执行make clean

再执行make static

把编译的libcjson.a拷贝到lib目录,重新编译演示项目成功。

项目设计到的库及头文件可以从下面的链接下载

https://download.csdn.net/download/meishow88/87743174

PS:一个空的VisualFreeBasic的Win窗体程序是151K,加入cJson库后程序体积增大到184K,体积增加了33K,这个库还是相当的合理的。

VisualFreeBasic调用超轻量级JSON解析器cJSON库相关推荐

  1. cJSON_译(C中的超轻量级JSON解析器)

    cJSON ANSI C中的超轻量级JSON解析器. 通行证 执照 版权所有(c)2009-2017 Dave Gamble和cJSON贡献者 特此免费授予获得此软件和相关文档文件("软件& ...

  2. Lua 实现JSON解析器

    JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Jav ...

  3. JavaScript语言精粹JSON解析器源码阅读

    1 // 这是一个用JavaScript编写JSON解析器的实现方案: 2 var jsonParser = (function() { 3 // 这是一个能把JSON文本解析成JavaScript数 ...

  4. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  5. 手把手教你实现一个 JSON 解析器!

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等. 在 ...

  6. json string 格式_自己动手实现一个简单的JSON解析器

    作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  7. json解析对应的value为null_徒手撸一个JSON解析器

      Java大联盟 致力于最高效的Java学习 关注 作者 | 田小波 cnblogs.com/nullllun/p/8358146.html1.背景JSON(JavaScript Object No ...

  8. string 转 json_手写Json解析器学习心得

    哦?从"{"开始,看来是个对象了! 一. 介绍 一周前,老同学阿立给我转了一篇知乎回答,答主说检验一门语言是否掌握的标准是实现一个Json解析器,网易游戏过去的Python入门培训 ...

  9. 高手教您编写简单的JSON解析器

    编写JSON解析器是熟悉解析技术的最简单方法之一.格式非常简单.它是递归定义的,所以与解析Brainfuck相比,你会遇到轻微的挑战 ; 你可能已经使用JSON.除了最后一点之外,解析 Scheme的 ...

最新文章

  1. 倒计时|全场书籍低至 3.5 折起,无门槛包邮!
  2. 关于cookie的文章(cookie与session机制)
  3. mysql2008无法启动,2005SQL服务无法启动解决办法
  4. 知识梳理——CSS篇
  5. 苹果7手机严重卡顿_苹果手机仅配备4GB运存都不会卡顿,安卓系统为何要更多内存?...
  6. 操作系统复习笔记(五)
  7. 【BMC_patrol常见问题汇总】Console License生成
  8. 步步为营VS 2008 + .NET 3.5(2) - VS 2008新特性之JavaScript Intellisense and Debugging
  9. 面试官: MySQL 数据库的优化,你知道有哪些?
  10. Java高并发 -- 并发扩展
  11. Zoi选项 — Insure抑制功能
  12. php 根据url获取域名,php 从url中获取域名的实例代码
  13. matlab求解多元函数的偏导数diff
  14. 软件测试工程师相关证书
  15. 微信小程序使用阿里字体图标库的方法
  16. sflow-rt 3.0 安装
  17. 《纽约客》特写Jeff Dean与Sanjay:谷歌唯二11级工程师,同一台电脑上写代码
  18. TypeScript (TS
  19. 高通+android笔记本电脑,华为发布三款笔记本电脑,其中一款搭载高通骁龙850处理器...
  20. 图灵在布莱切利园的女朋友_极客参观布莱切利公园

热门文章

  1. 北邮网研mysql概念面试_回馈王道--2014北邮网研经验贴---初试+复试
  2. 万用表 示波器 逻辑分析仪使用场合 CAN数据波形测量 以及使用方法
  3. 电脑中毒文件自己恢复的操作步骤
  4. 网络团购热潮促成团友聚会交流购物心得
  5. 鸿蒙不替代安卓,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  6. 小功能⭐️unity3d KeyCode各键值说明
  7. Wise Owl Says… by Brian O'Kane
  8. HarmonyOS2.0操作系统下的Zoom软件如何正常应用?解决方案来了!
  9. C语言关于飞机躲子弹的游戏,团队项目(2.1) -- 飞机躲避小游戏
  10. 删除金山毒霸中 KAVEXT.DLL 心得!