javascript - FF插件: How to declare C function fgets in javascript

标签 javascript c firefox firefox-addon fgets

我正在开发 Firefox 插件,我想使用 WinApi 读取文件。 我设法与 WinApi 连接并且工作正常。

var lib = ctypes.open("user32.dll");
var msgBox = lib.declare("MessageBoxW",
                       ctypes.winapi_abi,
                       ctypes.int32_t,
                       ctypes.int32_t,
                       ctypes.jschar.ptr,
                       ctypes.jschar.ptr,
                       ctypes.int32_t);
var MB_OK = 0;
var ret = msgBox(0, "Hello world", "title", MB_OK);

现在我声明fopen:

const FILE = new ctypes.StructType("FILE").ptr;   
var fopen = libc.declare("fopen",                     // symbol name
                        ctypes.default_abi,           // cdecl calling convention
                        FILE,                         // return type (FILE*)
                        ctypes.char.ptr,              // first arg (const char*)
                        ctypes.char.ptr);             // second arg (const char*)

但我未能声明fgets。我还是想不通。我尝试这样做:

var libc = ctypes.open("msvcrt.dll");
var fgets = libc.declare("fgets",                    
                        ctypes.default_abi,           
                        ctypes.char.ptr,              
                        ctypes.char.ptr,              
                        ctypes.int32_t,               
                        FILE);                        
// Call the function, and get a FILE* pointer object back.
console.log(LOG_FILTER, "Try to open file.");
var file1 = fopen("1.in", "r");

  var SIZE = 100;
  var line = ctypes.char(SIZE).ptr;
  line = fgets(line, SIZE, file1);` 

我认为我没有使用错误的库,因为那样我会得到错误“错误:在库中找不到函数符号”,但我仍然得到“TypeError:预期类型指针,得到(void 0)”

最佳答案

这是一堆不同 ctype 声明的示例: https://builder.addons.mozilla.org/package/161408/latest/

如果您仍然无法弄清楚,请将其发布并尝试让 fget 工作。

但建议使用 namier,最好使用跨平台选项,但为了学习,如果您不明白,我们可以在我有时间时执行此 fget

关于javascript - FF插件: How to declare C function fgets in javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936362/

相关文章:

javascript - 谷歌地图点击事件无法完全正确工作

javascript - 深入理解 : How code structure affects the content of date arrays created with loops

javascript - 图像上的 Jquery UI Datepicker

c - 除以和随后与相同 float 的乘法

c++ - 是否可以用 wincrypt 做一个 HMAC?

firefox - Google Cloud Shell 和 VM SSH 命令行空白

javascript - 未捕获的类型错误 : Object [object Object] has no method 'handsontable' ?

c - "Comparing constant with boolean expression is always true"警告是什么意思?

javascript - 如何使用 Greasemonkey 脚本防止 Firefox 中的页面缓存

html - 将 CSS 样式的表单元素还原为默认浏览器样式