У меня есть следующая ситуация, которую я не понимаю. У меня есть приложение, где из NodeJS я вызываю функцию C++ с помощью Nan. Код на стороне C++ выглядит следующим образом:Мои данные исчезают при передаче буфера в NodeJS из C++
#include <nan.h>
#include <iostream>
using namespace std;
using namespace Nan;
using namespace v8;
//
// The function that we are going to call from NodeJS
//
NAN_METHOD(Combine)
{
char str[80];
strcpy (str,"these ");
strcat (str,"strings ");
strcat (str,"are ");
strcat (str,"concatenated.");
//
// Send the buffer back to NodeJS with the result of our calculation.
//
info
.GetReturnValue()
.Set(
NewBuffer((char *) str, 80)
.ToLocalChecked());
}
//
// The constructor
//
NAN_MODULE_INIT(Init)
{
//
// Expose the method or methods to NodeJS
//
Nan::Set(
target,
New<String>("combine").ToLocalChecked(),
GetFunction(New<FunctionTemplate>(Combine)).ToLocalChecked()
);
}
//
// Load the constructor
//
NODE_MODULE(basic_nan, Init)
Когда я отправить обратно в NodeJS моего переменного полукокса, я получаю 80 байт, но они полны случайных величин. Похоже, что место, где указала переменная str
, было исправлено до создания NewBuffer()
.
Мои вопросы
Я хотел бы получить объяснение о том, что происходит, и в идеале получить потенциальное решение.
'malloc'? В самом деле? – skypjack
@skypjack Я предполагал, что он использует C, так как я видел все эти strcat и strcpy звонки. Я никогда не использовал эту библиотеку Nan, я понятия не имел, что это C++. Не нужно ниспровергать. Кроме того, malloc также должен работать на C++. –
Теги содержат 'C++'. Плагины Node.js написаны на C++. Он вызывает функции-члены на объекте с именем 'info', который, очевидно, возвращает' * this', а это _C++ - ish_. Почему вы предположили, что OP использует C? – skypjack