javascript — TypeError: [c ++ addon class] не является конструктором

TypeError: m.Default is not a constructor ошибка, которую я получаю, когда пытаюсь создать класс JavaScript с помощью NAN.

Вот что я делаю:

//AudioDeviceController.h
#pragma once
#include <nan.h>

class Default : public Nan::ObjectWrap
{
public:
static Nan::Persistent<v8::FunctionTemplate> constructor;
static NAN_MODULE_INIT(Init);
static NAN_METHOD(New);
static NAN_GETTER(RoleGetter);
static NAN_SETTER(ReadOnly);
};

AudioDeviceController.cc:

#include "AudioDeviceController.h"Nan::Persistent<v8::FunctionTemplate> Default::constructor;

NAN_MODULE_INIT(Default::Init)
{
v8::Local<v8::FunctionTemplate> construct = Nan::New<v8::FunctionTemplate>(Default::New);
constructor.Reset(construct);
construct->InstanceTemplate()->SetInternalFieldCount(1);
construct->SetClassName(Nan::New("Default").ToLocalChecked());

Nan::SetAccessor(construct->InstanceTemplate(), Nan::New("media").ToLocalChecked(), Default::RoleGetter, Default::ReadOnly);
Nan::SetAccessor(construct->InstanceTemplate(), Nan::New("communications").ToLocalChecked(), Default::RoleGetter, Default::ReadOnly);

target->Set(Nan::New("Default").ToLocalChecked(), construct->GetFunction());
}

NAN_METHOD(Default::New)
{
if(!info.IsConstructCall())
{
return Nan::ThrowError(Nan::New("In C++: Default::New - called without new keyword").ToLocalChecked());
}

if(info.Length() != 0)
{
return Nan::ThrowError(Nan::New("In C++: Default::New - Expected 0 parameters").ToLocalChecked());
}

Default *def = new Default();
def->Wrap(info.Holder());

info.GetReturnValue().Set(info.Holder());
}

NAN_GETTER(Default::RoleGetter)
{
//return the correct role
}

NAN_SETTER(Default::ReadOnly)
{
return Nan::ThrowError(Nan::New("Property is read only").ToLocalChecked());
}

index.cc:

#include <nan.h>
#include "AudioDeviceController.h"
NAN_MODULE_INIT(InitModule)
{
Default::Init(target);
}

NODE_MODULE(winCoreAudio, InitModule);

bindings.gyp:

{
"targets": [{
"target_name": "winCoreAudio",
"include_dirs" : [
"src",
"<!(node -e \"require('nan')\")"],
"sources": [
"src/index.cc",
"src/asyncCBclass.cpp",
"src/AudioDeviceController.cc",
"src/AudioDevice.cc",
"src/WinAPIWrap.cpp",
]
}]
}

index.js:

var m = require('./');

var deflt = new m.Default();

и вот полный вывод ошибок:

var deflt = new m.Default();
^
TypeError: m.Default is not a constructor
at Object.<anonymous> (C:\Users\Prime\source\repos\uvAsyncStuff\index.js:25:13)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3

Результатом, которого я пытаюсь достичь, является способность использовать new Ключевое слово в JavaScript, чтобы иметь возможность создавать различные объекты. Мне также нужно иметь возможность с помощью C ++ создавать новые объекты JS, которые я объявил в коде C ++. Я могу только догадываться, что Node не распознает объекты, которые я объявляю. У меня есть несколько объектов, подобных этому, в проекте, над которым я работаю, этот пример проще всего привести в качестве примера.

Полный проект, с которым это будет использоваться, может быть найден Вот.

  • Я компилирую с Windows 10
  • Версия узла: 8.11.3
  • Версия NAN: 2.10.0
  • версия node-gyp: 3.7.0.

0

Решение

Для меня, я смог исправить эту ошибку, непосредственно требуя ./build/Release/[insert-module-name].node в начале index.js

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]