将char*从javascript传递到c,并将char*从c返回到Jsctypes中的javascript
我在库pruebaChar.so中有此C代码用于jsctypes:将char*从javascript传递到c,并将char*从c返回到Jsctypes中的javascript,javascript,c,firefox-addon,jsctypes,Javascript,C,Firefox Addon,Jsctypes,我在库pruebaChar.so中有此C代码用于jsctypes: char * ejecutarComando(char * miComando){ return miComando; } 然后,我有另一个调用pruebaChar.so的代码: function miComando(unComando) { var {Cu} = require("chrome"); var {ctypes} = Cu.import("resource://gre/module
char * ejecutarComando(char * miComando){
return miComando;
}
然后,我有另一个调用pruebaChar.so的代码:
function miComando(unComando) {
var {Cu} = require("chrome");
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", null);
var lib = ctypes.open("/home/usuario/pruebaChar.so");
var comandoLib = lib.declare("ejecutarComando",
ctypes.default_abi,
ctypes.char, // return type is correct?
ctypes.char.ptr // argument type is correct?
);
/* How do I pass the argument to function
and save the return value from function?*/
var returnString = comandoLib(unComando); // Is this correct?
return ???;
}
我应该在返回类型和参数类型中输入什么值?如何将参数传递给函数并保存函数的返回值
非常感谢:请尝试使用ctypes.char.ptr代替ctypes.char,对于字符串的第一个参数,它似乎可以工作。这也是ctypes.char.ptr
下面是一个使用字符串作为返回执行x11 jsctypes的示例:
宣布:
这只是延迟绑定,但会转换为:
var blah = ctypes.declare('gtk_window_get_title', ctypes.default_abi, ctypes.char.ptr, ctypes.voidptr_t);
然后他这样使用它:
在我看来,返回的不是jsstring,因为他使用libc.strcmp进行c字符串比较。因此,我认为您可能需要执行winTitle.readString来将字符串放入js中。也许不行,我不确定,也许winTitle.contents也行。
我不支持js ctypes,但如果你能给我发送你的.so文件并告诉我一些关于它的信息,我可以让它工作并让你知道。确保添加firefox插件标签,否则人们不会浏览jsctypes部分,因为他们不知道。这是一个很好的问题,应该是简单的答案,现在是凌晨3点,所以我必须睡觉,明天期末考试后会检查喔!同时在这里浏览我的ctypes代码:你可能会找到答案。这一要点与您的案例非常相关:jaja。嗯。非常感谢。祝你考试好运
var blah = ctypes.declare('gtk_window_get_title', ctypes.default_abi, ctypes.char.ptr, ctypes.voidptr_t);
let data = ctypes.cast(userData, _find_data_t.ptr);
let inTitle = data.contents.inTitle;
let gtkWin = ctypes.cast(gtkWidget, gtk.GtkWindow.ptr);
let winTitle = gtk.gtk_window_get_title(gtkWin);
if (!winTitle.isNull()) {
log.debug(inTitle+" = "+winTitle);
if (libc.strcmp(inTitle, winTitle) == 0)
data.contents.outWindow = gtkWin;
}
}