在mozille扩展程序中,我运行:
SecSess.Logger.info("ctypes test");
Components.utils.import("resource://gre/modules/ctypes.jsm");
SecSess.Logger.info("1");
this.lib = ctypes.open("libcrypto.so");
SecSess.Logger.info("2");
var a = new Uint8Array(1<<10);
SecSess.Logger.info("3");
var ptr = new ctypes.uint8_t.ptr(a.buffer);
SecSess.Logger.info("4");
为什么在你可能会问的每一步之后这个丑陋的伐木?那么这段代码失败而没有向我显示错误。 (或者至少我找不到错误信息)
打印出来:
ctypes test
1
2
3
因此永远不会打印第5条日志消息,这意味着以下语句永远不会完成:
var ptr = new ctypes.uint8_t.ptr(a.buffer);
这是我必须使用的一些旧代码的简化版本,我也在网上发现它是有效的。但它不起作用。没有使用带有jpm的新SDK开发此附加组件。坦率地说,我不知道它是如何以及何时开发的,但我需要对它进行一些测试。它附带了一些在组件和模块目录中订购的源文件以及根目录中的chrome.manifest和install.rdf。我将这些文件复制到Mozilla的扩展目录中,以便它可以工作。扩展执行但ctypes似乎有问题。是不是完全支持ctypes,或者这些旧式插件不再适用于现代Firefox?
此致
罗埃尔
答案 0 :(得分:1)
我认为他们找到了一个禁止从缓冲区发出指针的补丁。我会仔细检查。
编辑:
啊:https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Working_with_ArrayBuffers,你不必用ctypes.uint8_t.ptr
包裹它,只需将它a.buffer
传递到你需要它的地方。 :)