Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

186
Views
Cargue módulos C nativos en duktape 2.1.0 para

Todavía estoy perdido después de leer el artículo de instrucciones.

  • https://github.com/svaarala/duktape/tree/master/extras/module-node

Se dice que

La devolución de llamada de carga es una función Duktape/C que toma el ID del módulo resuelto y: (1) devuelve el código fuente de Ecmascript para el módulo o indefinido si no hay código fuente, por ejemplo, para módulos C puros, (2) puede completar módulos.exportaciones mismo, y (3) puede reemplazar module.exports.

Pero al cargar un módulo C nativo,

  • ¿Qué se debe empujar a la pila de valor? duk_push_undefined(ctx) en lugar de duk_push_string(ctx, module_source) ?
  • ¿Qué debe devolver la devolución de llamada de carga a la persona que llama? return 0 en lugar de return 1 ?

Traté de llamar a myobject_init (usando la instancia predeterminada en http://wiki.duktape.org/HowtoNativeConstructor.html ) en la devolución de llamada de carga cb_load_module . Pero duktape se queja

TypeError: [objeto Objeto] no construible

cuando evalúo var MyObject = require("MyObject") , no importa si

  • empuje indefinido en la pila de valores y devuelva 1,
  • o no inserte nada en la pila de valores y devuelva 0.
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Problema resuelto. Hay algunos detalles más dispersos en

  • https://github.com/svaarala/duktape/blob/master/doc/c-module-convention.rst
  • http://wiki.duktape.org/HowtoModules.html Se trata del marco de carga de módulos de duktape 1.x, pero ayuda a comprender el marco de trabajo 2.x.

Los trucos más importantes son:

  • La función de inicio del módulo debe devolver una función (el constructor también es una función). NO registre la función usando duk_put_global_string .

     duk_ret_t module_init(duk_context* ctx) { duk_push_c_function(ctx, module_constructor, num_arguments_for_constructor); // set properties for the constructor return 1; // stack: [ ... constructor ] }
  • La función cb_load_module debe insertar la función de inicio del módulo en la pila de valores, luego usar duk_call para llamarla y configurar module.exports . NO llame directamente a la función de inicio del módulo.

     duk_ret_t cb_load_module(duk_context *ctx) { // stack: [ resolved_id exports module ] ... duk_push_c_function(ctx, module_init, 0); duk_call(ctx, 0); duk_put_prop_string(ctx, 2, "exports"); // obj_idx(module) = 2 return 0; // no .js source for native modules }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!