duktape modSearch. Native implementation in C
duktape modSearch. Native implementation in C
我试图实现一个native-C duktape modSearch,但我被卡住了。我阅读了DUKtape文档并查看了https://github.com/svaarala/duktape/issues/194但我仍然无法让它发挥作用。
我创建了一个简单的测试,我正在使用modSearch实现,下面是详细信息:
-
我有一个简单的javascript,它实现了一个平方函数。我称之为testR.js:
exports.area=函数(r){返回r*r;};
-使用上述简单函数的文件称为usetestR.js:
function main(){
// const square = require('./testR.js'); --> use this line for nodeJS
const square = require('testR.js');
var ts = square.area(8);
// console.log(ts); -> used this line for nodeJS
print(ts);
}
main();
现在有了duktape,我开始在C中实现函数modSearch,如下所示:
/* Declaration */
void modSearch_register(duk_context *ctx) {
duk_get_global_string(ctx, "Duktape");
duk_push_c_function(ctx, mod_search, 4 /*nargs*/);
duk_put_prop_string(ctx, -2, "modSearch");
duk_pop(ctx);
}
模式搜索
#include <stdio.h>
#include <string.h>
#include "duktape.h"
duk_ret_t mod_search(duk_context *ctx) {
/* Nargs was given as 4 and we get the following stack arguments:
* index 0: id
* index 1: require
* index 2: exports
* index 3: module
*/
int rc;
// Get ID
char *id = duk_require_string(ctx, 0);
printf("ID => %s 'n", id);
rc = strcmp(id, "testR.js");
if(rc == 0)
{
printf("Module found, loading... 'n");
// Read File
duk_push_object(ctx);
duk_put_global_string(ctx, "exports");
if(duk_peval_file(ctx,"testR.js" )!= 0)
printf("Problem !!! 'n");
else{
printf("Pass !!! 'n");
return 1;
}
return -1;
}
当我运行代码时,这就是我所拥有的:
ID => testR.js
Module found, loading...
Pass !!!
TypeError: undefined not callable
duk_js_call.c:776
main usetestR.js:3
global usetestR.js:8 preventsyield
error in executing file usetestR.js
你能帮我指出问题出在哪里吗?感谢
对不起,我想通了。。。也许这个例子可以在未来帮助其他人:)
以下是适用于的modSearch
duk_ret_t mod_search(duk_context *ctx) {
/* Nargs was given as 4 and we get the following stack arguments:
* index 0: id
* index 1: require
* index 2: exports
* index 3: module
*/
char *src = NULL;
FILE *f = NULL;
const char *filename = "/home/testR.js";
int rc, len;
// Pull Arguments
char *id = duk_require_string(ctx, 0);
printf("ID => %s 'n", id);
rc = strcmp(id, "testR.js");
if(rc == 0)
{
printf("Module found, loading... 'n");
// Read File and calculate its size (as DUKtape examples)
f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
len = (int) ftell(f);
// Rewind
fseek(f, 0, SEEK_SET);
src = malloc(len);
fread(src, 1, len,f);
fclose(f);
duk_push_lstring(ctx, src, len);
free(src);
return 1;
}
// Error
return -1;
}
运行程序,它显示
ID => testR.js
Module found, loading...
64
了解了基本知识后,就有可能用更复杂的方法来实现modSearch。
相关文章:
- Node.js's Buffer.writeFloatBE in Javascript
- Setting default onclick behavior for <img> tag in gene
- Lucene Search in Alfresco
- grep in JQuery to C#
- write HTML in JavaScript
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- HTMLInputElement in IE7
- Mongodb$in以与数组中相同的顺序获取结果
- element.dataset in Internet Explorer
- jQuery parent() in table
- JavaScript jvm implementation
- Instagram oauth flow in angularjs
- In循环的In运算符前后
- 如何使用for in循环在javascript中显示对象中的对象
- Jquery change onchange in onload
- 重构 jQuery in JS 问题
- duktape modSearch. Native implementation in C
- RTP RTSP implementation in javascript