改变VFP的生态,彻底揭开只会打嘴炮的伪专家

      目前祺佑三层开发框架(猫框)已经完成了HTTP 1.1协议的VFP实现,也部分完成了MQTT协议的VFP实现,这些是我在VFP的无人区探索,而那些只会打嘴炮的伪专家在哪里?有些看了我的文章,学了知识,还要贬低我,真不知道那些人是怎么想的。

       有部分狐友学习了我的框架,总想着去创建自己的轮子,但是框架是整套体系,内核是面向对象的开发思想,如果没有掌握面向对象的方式,是没有办法整体超越的。我说这个,其实不是打击大家,猫框会用就好,但我希望的是,大家朝着VFP的无人区前进。

       目前猫猫在做MQTT的VFP实现,以后VFP在物联网中一定能发挥更大的作用。最近发现了一块新的无人区,我希望有人能在这里拓展一下VFP的边界。

        用VFP混合JS,js的免费库是非常多的,甚至可以说是多于牛毛(VFP本身的库少之又少,就连做一点收费库,经常被某些人白PIAO,还理直气壮,我还是服了。)

牛逼的Qiuickjs引擎

       生猛!FFmpeg 开发者徒手撸了一个 JS 引擎文章,这是我前两年看到的文章,当时觉得里面一定有东西非常好用。QuickJS引擎为纯C写的,只有少数几个文件,整个工程下包括测试用的,一共包含十几个.C文件。相当精简。所有东西的编译用一个Makefile文件即可,自己要动手改点什么东西也是容易得很。

      先说QuickJS的作者,貌似有两位,其中的Fabrice Bellard是大牛。Qemu、FFmpeg的作者。这一辈子有FFmpeg一个就足以青史留名了。我简单从百度百科上摘抄了Bellard的履历。感觉上面这些语言都太简陋了,完全无法体现Bellard的厉害。

图片

QuickJS 是一个小型且可嵌入的 Javascript 引擎。它支持 ES2020 规范,包括模块、异步生成器、代理和 BigInt。它可选地支持数学扩展,例如大十进制浮点数 (BigDecimal)、大二进制浮点数 (BigFloat) 和运算符重载。

主要特点:

  • 小且易于嵌入:只有几个 C 文件,没有外部依赖,一个简单的 hello world 程序需要 210 KiB 的 x86 代码。

  • 启动时间极短的快速解释器:在台式 PC 的单核上运行 ECMAScript 测试套件的 75000 次测试大约需要 100 秒。运行时实例的完整生命周期在不到 300 微秒内完成。

  • 几乎完整的 ES2020 支持,包括模块、异步生成器和完整的 Annex B 支持(旧版 Web 兼容性)。

  • 选择 ES2020 功能时,几乎 100% 通过 ECMAScript 测试套件测试。Test262 报告中提供了摘要。

  • 可以将Javascript 源代码编译为没有外部依赖的可执行文件。

  • 使用引用计数(以减少内存使用并具有确定性行为)和循环删除的垃圾收集。数学扩展:BigDecimal、BigFloat、运算符重载、bigint 模式、数学模式。

  • 在 Javascript 中实现上下文着色的命令行解释器。

  • 带有 C 库包装器的小型内置标准库。

这篇文章讨论无人区,猫猫昨天开夜车到凌晨4点,也有测试了相关代码,查询了相关资料,目前能做的工作是:

  • 将JS生成dll供VFP调用
  • VFP代码中直接运行JS

1 将JS生成dll供VFP调用

qjsc -e -o hello.c hello.js

就会生成C源程序,就可以改写成DLL供VFP调用了

图片

这种方式也非常有用,这样大量的JS库我们就能应用了,但终级王炸是下面这个。

2 VFP代码中直接运行JS

VFP的FLL 就是C开发的,如果把QuickJS引擎置于FLL之中,那么VFP直接运行JS,大大扩展了VFP应用的边界。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
vfp9.0调用API制作照相软件实例 PUBLIC WM_CAP_DRIVER_DISCONNECT PUBLIC hwndc,WM_CAP_SAVEDIB,WM_CAP_FILE_SET_CAPTURE_FILEA,WM_CAP_SEQUENCE,WM_CAP_STOP DECLARE INTEGER capCreateCaptureWindowA IN "AVICAP32.DLL" STRING lpszWindowName ,INTEGER dwStyle , INTEGER x, INTEGER Y, INTEGER nWidth ,INTEGER nHeight,INTEGER ParentWin,INTEGER nId DECLARE INTEGER SendMessage IN "user32" INTEGER HWND, INTEGER wmsg,INTEGER wpar1, INTEGER wpar2 DECLARE INTEGER SendMessage IN "user32" AS SendMessageA INTEGER HWND, INTEGER wmsg,INTEGER wpar1, STRING wpar2 *!* 显示: WM_USER = 1024 WM_CAP_START = WM_USER WM_CAP_STOP = WM_CAP_START + 68 WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 WM_CAP_SAVEDIB = WM_CAP_START + 25 WM_CAP_GRAB_FRAME = WM_CAP_START + 60 WM_CAP_SEQUENCE = WM_CAP_START + 62 WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20 WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63 WM_CAP_SET_OVERLAY =WM_CAP_START+ 51 WM_CAP_SET_PREVIEW =WM_CAP_START+ 50 WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6 WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2 WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3 WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5 WM_CAP_SET_SCALE=WM_CAP_START+ 53 WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52 hWndC = capCreateCaptureWindowA('My Own Capture Window',1342177280,0,0,200,150,THISFORM.HWND ,0) &&显示大小 IF hWndC 0 SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0) SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0) SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0) SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0) SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0) SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0) SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0) SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0) * THISFORM.ACTIVATE ENDIF

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值