JSA里的FFI(2)——宽字符串LPCWSTR

wils
wils

创作者俱乐部成员

今天继续猜谜,试试传递宽字符串🤣

🔔

function wstring(s) {

const buff = new ArrayBuffer(s.length * 2 + 2)

const view = new Uint16Array(buff)

for (let i = 0; i < s.length; i++) {

view[i] = s.charCodeAt(i)

}

return buff

}

function tt()

{

const user32 = FFI.LoadLibrary('User32')

const msgbox = user32.LoadFunction('', 'MessageBoxW', '', 'int32', ['int32', 'pointer', 'pointer', 'int32'])

const wstr = wstring('a😀c')

msgbox.Call(Application.Hwnd, wstr, wstr, 1)

}

一开始的猜测是用FFI.RefPointer来传递指针

结果忘记写了,直接传了个ArrayBuffer竟也成了。。。


官方快出文档啊啊啊

只要有了FFI的文档,JSA直接超越VBA,再也不用羡慕它的declare啦,完美

winsqlite3.dll之类估计也直接能用了

猜出来的部分已经完美支持ahkdll了,窗体什么的不弄也罢,直接调用ahkdll动态生成更方便,再加上灵活的快捷键设置,以及更完善的winapi封装,只要FFI的官方文档出来,直接起飞啦


ExecuteExcel4Macro已经是牛夫人了,毕竟使用宽字符串太麻烦,且只能表格用,文档ppt只能眼馋,又不太支持64位和Linux

海南省
浏览 79
1
7
分享
7 +1
2
1 +1
全部评论 2
 
恰同学少年
点赞
· 黑龙江省
回复
wils
wils

创作者俱乐部成员

谢谢
· 海南省
回复