我正在开发 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/