私は理解できない次のような状況があります。 NodeJSからNanを使ってC++関数を呼び出しているアプリケーションがあります。次のようにC++側のコードは次のとおりです。C++からNodeJSにバッファを渡すと、データが消えます
#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私のchar型の変数に送り返すとき、私は80バイトを取得しますが、彼らはランダムな値に満ちています。 NewBuffer()
を作成する前に、str
変数が指し示していた場所が再利用されたように見えます。
私の質問
私は何が起こっているかについての説明を取得したい、そして理想的に潜在的な解決策になるだろう。
「malloc」?本当に? – skypjack
@skypjack私はstrcatとstrcpyの呼び出しをすべて見たので、彼はCを使用していると仮定していました。私はそのNanライブラリを使ったことが一度もありませんでした。 downvoteする必要はありません。また、mallocはC++でも動作するはずです。 –
タグには 'C++ 'が含まれています。 Node.jsプラグインはC++で書かれています。彼は明らかに '* this'を返す' info'という名前のオブジェクトのメンバ関数を呼び出しています。これは_C++ - ish_です。なぜOPがCを使っていると仮定しましたか? – skypjack