Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda