Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将char*从javascript传递到c,并将char*从c返回到Jsctypes中的javascript_Javascript_C_Firefox Addon_Jsctypes - Fatal编程技术网

将char*从javascript传递到c,并将char*从c返回到Jsctypes中的javascript

将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

我在库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/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;
     }
 }