• 2558阅读
  • 7回复

基于C++的一套web框架 [复制链接]

上一主题 下一主题
离线samhuilong
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2022-08-31
模仿Qt风格,基于C++写了一套web框架,编译成webassembly在浏览器中运行。之前写过一套typescript版本,现在基于C++复写了一套,让C++程序员能够不用切换语言,就可以轻松的去编写复杂度较高的工业web应用。如果有需求,后续也会考虑再复写一套C#版本。
webassembly是很棒的技术,让web有了更多的可能。而且webassembly不只应用在前端,也可以应用在后台服务。

图1:停靠窗口示例展示

停靠窗口示例的C++代码
4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 国产之光 2022-09-01
20091001753 贡献值 +1 国产之光 2022-09-01
20091001753 威望 +1 国产之光 2022-09-01
20091001753 金钱 +10 国产之光 2022-09-01
离线yanhuaw

只看该作者 1楼 发表于: 2022-09-01
        
离线shawking

只看该作者 2楼 发表于: 2022-09-03
WebAssembly现在能访问数据库了吗?
离线samhuilong

只看该作者 3楼 发表于: 2022-09-03
回 shawking 的帖子
shawking:WebAssembly现在能访问数据库了吗? (2022-09-03 10:23)

你说的是IndexedDB吧?WebAssembly是不可以直接读取的,可以写一套C++版本的IndexedDB,用C++封装一层数据库接口,接口内部调用原生的js的操作,然后js把数据返回给C++层面目前前端的开发还离不开js,因为其他语言的生态太差了,应该很难找到想要的C++版本的库,所以这个封装C++版本的工作可能需要自己完成。

我举个简单的例子来说明下,比如要在C++层面判断当前设备是否是触摸设备,wasm是没有权限直接访问的。
在C++层面提供如下的接口:
bool isTouchDevice();
函数内部调用原生js返回bool值:
bool isTouchDevice()
{
    return (bool)EM_ASM_INT_V(return 'ontouchstart' in document.documentElement ? 1 : 0;);
}
假设把这类接口封装成一个库,那么就是C++版本的访问本地设备信息的库。
然后C++应用层调用这个库的接口即可获取设备信息。
离线shawking

只看该作者 4楼 发表于: 2022-09-05
多谢,多谢!这么说,不能访问数据库是安全机制决定的。只能想别的办法。
离线圣域天子

只看该作者 5楼 发表于: 2022-09-06
wasm中进行中文输入,有办法吗?
离线samhuilong

只看该作者 6楼 发表于: 2022-09-06
回 圣域天子 的帖子
圣域天子:wasm中进行中文输入,有办法吗? (2022-09-06 11:24) 

有一家产品盈帆报表设计器,他们是通过调用js原生态的输入框来实现的,我觉得技术上完全可行。
以下是我复制一段他们解决的方案:
Qt5.12.2所编译的web插件自身是无法输入中文的,解决此问题,需要使用html的编辑框。在web插件中需要输入的地方调用js接口,发送事件,前端响应事件,将编辑框显示出来,前端的编辑框可以响应本地的输入法,中文输入后,再将文本通过接口回传到web插件中,并将编辑框隐藏,这样解决中文输入问题。
离线圣域天子

只看该作者 7楼 发表于: 2022-09-09
回 samhuilong 的帖子
samhuilong:有一家产品盈帆报表设计器,他们是通过调用js原生态的输入框来实现的,我觉得技术上完全可行。
以下是我复制一段他们解决的方案:
Qt5.12.2所编译的web插件自身是无法输入中文的,解决此问题,需要使用html的编辑框。在web插件中需要输入的地方调用js接口,发送事件,前端响应事 .. (2022-09-06 20:06) 

这个方案我见过,QML上的代码也有。
但是这不好的方案,而且不同类型的输入框需要多种不同的风格。

在 pascal 上用的wasm编译器不同,可以实现中文输入的
快速回复
限100 字节
 
上一个 下一个