无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: slore
打印 上一主题 下一主题

[原创] [更新(2022/11/11) ModernUI回归] explorer再见,WinXShell你好!

    [复制链接]
1#
发表于 2020-12-23 12:39:49 | 显示全部楼层
s 大你好。
关注这个winxshell 很久了.


十多年前玩过一段时间 pecmd/wincmd 。
玩多了类C语言,现在再回过头看 pecmd的语法可读性太糟糕了。

lua 和 C还是蛮接近的,至少阅读没有什么障碍。
winxshell内置了lua 引擎,是否可以将它拿来做 lua 解释器,这样可以一定程度上代替 pecmd。
目前发现可以使用 -code 执行lua 命令,或 -script 载入外部脚本。
配合 -console 可以用 app:print() 调试,但是 lua 内部的 print函数 无输出。

加之 您的 winxshell 加了很多对象,看起来缺乏文档指引(或者我没找到),要自己写点什么很是吃力。
甚至连 winxshell 的一些命令行参数都没有帮助,只能在您发布的几个帖子来回翻找。

由于不是开源软件,也找不到任何有价值的进阶线索。。。

回复

使用道具 举报

2#
发表于 2020-12-24 09:49:06 | 显示全部楼层
slore 发表于 2020-12-23 19:56
WinXShell 公开参数一览:

wxs-open:system | 打开我的电脑属性

感谢整理。

昨天我还费劲 枚举函数。。

```
app:print('\r\n---------');

tb="";

function list(t)
        for k, v in pairs(t) do
                tb= tb .. '\n' .. tostring(k) .. "\ttype:" .. tostring(type(v));
                if type(v) == "table" then
                winapi.show_message('is_table', k);
                for k1, v1 in pairs(v) do
                        tb = tb .. '\n  ' .. k .. "." .. k1 .. '\ttype:' .. tostring(type(v1));
                end
                end
                tb= tb .. "\n";
        end
end

winapi.show_message('@',  __this__ )
list(_G);


f = io.open("1.txt", "a")
f:write( tb )
f:close()
```

回复

使用道具 举报

3#
发表于 2021-6-30 19:56:05 | 显示全部楼层
本帖最后由 junyee 于 2021-6-30 20:18 编辑

楼主你好。

是否可以考虑出一个 外挂 lua53.dll 的版本?
方便我自己调用 c的 lib 。我写了个测试的dll, 并把 lua53.dll复制过来,倒是可以工作。

还有使用 -console  参数, 遇到错误时是否可以暂停窗口,而不是像现在这样一闪而过,很不利于调试。






点评

静态编译lua53.lib到你的c的lib,生成dll文件,放到 LuaLibs\ 你就可以直接 require 引用你的C库。 -console -code 你的代码 app:sleep(50000)  详情 回复 发表于 2021-6-30 21:15
回复

使用道具 举报

4#
发表于 2021-7-1 20:20:29 | 显示全部楼层
slore 发表于 2021-6-30 21:15
静态编译lua53.lib到你的c的lib,生成dll文件,放到

LuaLibs\


当lua 脚本错误,不一定是语法错误。

如 a=require("a")
如果 a.dll 不存在或错误时,用 lua53.exe 执行是会报错的。
而用 winxshell -script 就是一闪而过,即使在 cmd.exe 中执行也是弹出另一个 console 一闪而过。

暂停脚本可以用 os.execute('pause') 。
---

静态编译这里我用 tinyc 编译器没成功。
tinyc 编译 lua源码成功了。

`tcc  test.c -Llua-5.3.0 -llua -shared -Ilua-5.3.0  -o test.dll`
生成的dll 有100多kb,但是执行报错。

昨天用
`tcc test.c lua53.dll  -shared -Ilua-5.3.5_Win32_dll16_lib\include -o test.dll`
生成的 test.dll 则要 lua53.dll在同目录才可以工作,不过要增加 200+KB  的体积。

~~~~
感觉是生成的 liblua.a 有问题.
有时间再用 gcc 或 vs 试试,都不是很熟。


点评

静态编译可以不要 lua53.dll,不过体积增大。 那就直接 lua53.dll 放到 WinXShell 目录就可以,官方的dll就直接能用。  详情 回复 发表于 2021-7-1 21:55
回复

使用道具 举报

5#
发表于 2021-7-2 10:14:30 | 显示全部楼层
slore 发表于 2021-7-1 21:55
静态编译可以不要 lua53.dll,不过体积增大。

那就直接 lua53.dll 放到 WinXShell 目录就可以,官方的 ...

今天又测试了下,
用 gcc 编译的静态 test.dll ,在 winxshell 同样报错。


而用 gcc 编译的 lua53.exe 和
`https://sourceforge.net/projects ... ols%20Executables/`下载的lua53.exe
执行 require('test') 则不会报错。

还有编译的静态 test.dll 太大了,竟然达到345KB (可能跟gcc也有关)。。
比动态编译的 test.dll + lua53.dll 还要大,这么折腾似乎没有什么意义了。
~~~

如果winxshell 不出外置 lua53.dll 版本 的话,就不再折腾啦。



点评

我之前直接lua53.dll放到外面,第三方的dll可以使用。 不用编译不连接lua53.lib的WinXShell.exe外置版。 你给个简单的test.dll的演示代码吧。 我用VS编译没有问题。简单的函数用TCC也编译过。 没用过gcc这  详情 回复 发表于 2021-7-2 11:18
回复

使用道具 举报

6#
发表于 2021-7-2 11:30:55 | 显示全部楼层
本帖最后由 junyee 于 2021-7-2 11:51 编辑
slore 发表于 2021-7-2 11:18
我之前直接lua53.dll放到外面,第三方的dll可以使用。
不用编译不连接lua53.lib的WinXShell.exe外置版。 ...

lua53.dll 丢在 winxshell 目录上,一直是可以工作的。

我是想不用 lua53.dll 节省这几百KB的体积。

gcc静态编译的,可以在 lua53.exe 中 工作,winxshell中不可以。 且体积较大(345KB)。

gcc/tcc动态编译的,则必须复制lua53.dll到工作目录, lua53.exe和 winxshell 都 可以工作。


代码很简单。



  1. ##file:test.c
  2. //......
  3. int __declspec(dllexport)  luaopen_test(lua_State *L) {
  4.         
  5.         lua_newtable(L);

  6.     lua_pushliteral(L, "VERSION");
  7.     lua_pushstring(L, "this_is_version_section.");
  8.     lua_settable(L, -3);
  9.    
  10.         return 1;
  11. }


  12. ##test.lua

  13. a=require('test')
  14. app:print( a.VERSION )
  15. --print( a.VERSION )

复制代码

换一下。test.lua

  1. app=app or _G
  2. app.print( 'aaa' )

  3. yk=require('yk')
  4. app.print( yk.VERSION );

  5. os.execute('pause')
复制代码



回复

使用道具 举报

7#
发表于 2021-7-9 10:12:32 | 显示全部楼层
本帖最后由 junyee 于 2021-7-9 10:18 编辑
slore 发表于 2021-7-9 00:03
WinXShell中引用了 luajson, winapi, 提供了 app 和 wxs 对象,一个文件直接使用最好,直接静态链接了lua ...

luajson 还像不如 jsonc 好用。

我就是因为 https://github.com/stevedonovan/winapi 中带的 api 函数还不够用,才想着自己写的。

既然不考虑,我就只好外挂 lu53.dll 了。
----
tcc/gcc 动态编译都是kb级别,
而静态编译出来就要几百KB,这么一来还不如外挂个官方的 lua53.dll 了呢。

----
论坛很多人强迫症喜欢单文件,这样看着轻爽,但是带了内存和存储的额外消耗。
现在的安卓APP ,随便揪一个APK 都有可能有这两个大家伙 libchromium / libffmpeg,好像我们手机存储不要钱似的(虽然可以给开发带来便利)。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-18 07:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表