注册 登录
编程论坛 VFP论坛

关于webview2执行VFP操作dbf,版本主看看我这里似乎是成功的,是不是我理解那里有点不对

iswith 发布于 2023-03-01 12:35, 1905 次点击
我引用你的代码在此基础上改了一下发现是可以直接在EXE操作DBF,当然VFP  COM  DLL 更好,这样我可以驱动STA,MTA来多线完成我的任务而不会阻塞。
只有本站会员才能查看附件,请 登录
22 回复
#2
吹水佬2023-03-01 13:49
web客户端如果不用验证注册COM服务是不能正常操作本地文件,除非不考虑安全问题。
是不是引用的是注册了的VFP对象
如果是用注册了的COM类对象,WebView2这样搞就没什么意义。
#3
吹水佬2023-03-01 13:55
JS有服务端的库,可以操作文件,可以试试。
#4
iswith2023-03-01 14:23
我的系统是win7,我现在想验证在其它系统平台会怎样,直接在EXE环境调VFP,方法函数
#5
吹水佬2023-03-01 14:29
不执行磁盘文件可以,用字符串命令,如 EXECSCRIPT()
#6
吹水佬2023-03-01 14:32
这样试试
vfp.DoCmd("EXECSCRIPT(FILETOSTR('test.prg'))");
#7
iswith2023-03-01 15:35
实际证明可以直接写读写磁盘我测试了,我觉得这并不危险,因为这个对象是我在WebView2才传进去执行的!又不是在服务器上

[此贴子已经被作者于2023-3-1 15:36编辑过]

#8
wxzd1232023-03-01 15:56
回复 4楼 iswith
你好,win7成功了,分享一下经验,学习学习
#9
吹水佬2023-03-01 16:13
以下是引用iswith在2023-3-1 15:35:56的发言:

实际证明可以直接写读写磁盘我测试了,我觉得这并不危险,因为这个对象是我在WebView2才传进去执行的!又不是在服务器上

“读写磁盘”与“执行磁盘文件”是两回事。
DO PRG 是执行磁盘文件,加载时与指令寄存器有关,而读写磁盘只是与内存有关(载入的东西没有触及到指令寄存器)。
vfp.DoCmd("DO test.prg"); 与 vfp.DoCmd("EXECSCRIPT(FILETOSTR('test.prg'))"); 虽然结果一样,但机理不同。


[此贴子已经被作者于2023-3-1 16:17编辑过]

#10
吹水佬2023-03-01 16:39
VFP不同形式的读写文件可以多测试一下
如 vfp.Docmd("STRTOFILE('abcd','D:\temp\test.txt')");
#11
iswith2023-03-01 17:44
“读写磁盘”与“执行磁盘文件”都没有问题,我得找个win10试试
#12
iswith2023-03-01 17:46
以下是引用wxzd123在2023-3-1 15:56:32的发言:

你好,win7成功了,分享一下经验,学习学习

你得用管理员注册我写的WebView2.DLL,再把吹水佬的代码引用就可以。
#13
吹水佬2023-03-01 17:52
以下是引用iswith在2023-3-1 17:44:27的发言:

“读写磁盘”与“执行磁盘文件”都没有问题,我得找个win10试试

我就是win10试的过程中_vfp对象的DoCmd方法,有些命令对读写文件好像有问题,有待测试。
如果不是直接用过程中_vfp对象,那就没测试过。
通过VFP写COM对象来运作好像意义不大,这样不用WebView2也一样行。
#14
吹水佬2023-03-01 17:55
以下是引用iswith在2023-3-1 17:46:12的发言:


你得用管理员注册我写的WebView2.DLL,再把吹水佬的代码引用就可以。

可能与你的WebView2.DLL有关,要注册是一个COM服务吧。
注册成功了就是说验证了,能不能正常运行只是安全级别的问题。
#15
吹水佬2023-03-01 17:59
我封装的WebView2只是一个API扩展库DLL,不是COM的DLL,不用注册,同调用windows API一样使用,用DECLARE命令声明就可以。
我测试结果不同可能与这问题有关。
#16
吹水佬2023-03-01 18:46
还要测试一下没有安装VFP的机上运行情况,因正常安装的VFP本身也是一个COM。
#17
iswith2023-03-01 23:06
估计 就是这么一个原因吧,没有写COM DLL直接调的方法程序,调COM 会多出线程来在特殊业务场景还是非常有必要的。

[此贴子已经被作者于2023-3-1 23:08编辑过]

#18
iswith2023-03-01 23:09
另外你看看菜单自定义这个我觉得也是有必要的!在交互应用时菜单还是占用业务比例比较大!
#19
吹水佬2023-03-02 06:32
以下是引用iswith在2023-3-1 23:06:42的发言:

估计 就是这么一个原因吧,没有写COM DLL直接调的方法程序,调COM 会多出线程来在特殊业务场景还是非常有必要的。

WebView2好像没提到多线程问题,据说Chromium对多线程的支持有问题,看看目前用Chromium内核的浏览器,都是用子进程来解决这个问题。
或者Chromium这东东对资源要求也高,因系统分配给进程使用资源也有限,用子线程可能影响性能发挥。
#20
吹水佬2023-03-02 06:37
以下是引用iswith在2023-3-1 23:09:47的发言:

另外你看看菜单自定义这个我觉得也是有必要的!在交互应用时菜单还是占用业务比例比较大!

菜单功能可以方便操作,相当于鼠标快捷键。
WebView2有设置或自定义菜单功能,这个功能接口可以添加。
#21
iswith2023-03-02 07:31
以下是引用吹水佬在2023-3-2 06:32:33的发言:


WebView2好像没提到多线程问题,据说Chromium对多线程的支持有问题,看看目前用Chromium内核的浏览器,都是用子进程来解决这个问题。
或者Chromium这东东对资源要求也高,因系统分配给进程使用资源也有限,用子线程可能影响性能发挥。

内核我那里我们那里能编写,我们都在内核上层MS包装一层上调用!离着十万八千米呢?这层MS都干了多少线程你肯定没看过。。。。
#22
吹水佬2023-03-02 09:02
以下是引用iswith在2023-3-2 07:31:02的发言:


内核我那里我们那里能编写,我们都在内核上层MS包装一层上调用!离着十万八千米呢?这层MS都干了多少线程你肯定没看过。。。。

内核也不是MS的,WebView2也是MS封装这个内核的东东。
只是应用层次不同,这个内核多线程的问题也有过一些说法。
说归说,自己的体会才是真家伙。
#23
吹水佬2023-03-02 09:13
可能是理解角度不同,内核多线程问题并不是说封装他的应用层多线程问题,
而是在应用层进程的多个子线中能否正常使用这个内核的功能,或者说这内核对多线的支持度问题。
1