将OSX OSX OBJ-C/CG屏幕快照代码移植到JS-CTYPES-在最终行上崩溃



我移植了一些Objective-C/CoreGraphics代码,该代码屏幕截图进行了多个监视器,但它不起作用。JSCTYPES的家伙将无法提供帮助,因为本节只是我回答问题

OBJC/CG代码来自此处:https://stackoverflow.com/a/28247749/1828637

我的JSCTYPES类型/struct/声明在这里:https://github.com/noitidart/nativehot/nativehot/blob/mac-troubleshooting/modules/ostypes_mac.jsm

JSCTYPES端口在这里:https://github.com/noitidart/nativehot/blob/mac-troubleshooting/modules/workers/mainworker.js#l443-656

最后一行是643行,导致崩溃:

var rez_writeToFile = ostypes.API('objc_msgSend')(data, ostypes.HELPER.sel('writeTofile:atomically:'), myNSStrings.get(OS.Path.join(OS.Constants.Path.desktopDir, 'full_ss.png')), ostypes.CONST.YES);

这与

的objectivec一致
[data writeToFile:@"/tmp/screenshot.png" atomically:YES];

除了我更改了...桌面/... png

的路径

我写信给Sepepearte Gist,以对齐文本diff软件中的行以确保我做了所有事情。

  • 这是objc/cg:https://gist.github.com/noitidart/8affcd8bee60d2222222222222dcb52
  • 这是jsctypes:https://gist.github.com/noitidart/3d4a4e8df625dbea8cc1

我不认为我错过了任何我不知道为什么它在最后一行崩溃

执行任何OBJC/CG的人都会看到任何类型的定义是错误的或我错过的任何类型定义(例如,OBJC代码使用复合措施,我不确定我不确定我在端口中正确理解/翻译它们)。

wowww,所以在挣扎了几个小时后,我就会意识到它立即意识到哈哈

选择器中的套管错字!我有writeTofile:atomically,而不是writeToFile:atomically

如果有人想对此进行测试,这是一个简单的Firefox插件测试用例。

  1. 安装一个允许从此处安装github存储库中安装插件的插件
  2. 转到此处工作的分支:https://github.com/noitidart/nativeshot/tree/f5f2e8606d3c5c5c5c5c5c657e901239d39d3ceb8c8c8c8c8c8c8c79a4494
  3. li>然后单击右下方的"添加到firefox"按钮,"下载zip"按钮
  4. 单击该屏幕截图中可以看到的工具栏按钮图标:https://i.stack.imgur.com/gokhc.png
  5. Check Desktop您现在有一个带有所有监视器的屏幕截图的单个PNG文件,@kenthomas的巨大道具!

最新更新