3

C++ クラスのインスタンスをインスタンス化し、それを引数として JavaScript コールバックに渡したいと考えています。このクラスObjectWrapは から継承され、Node.js で使用できます。

インスタンスが JavaScript から来た場合、同じクラスのインスタンスをコールバックに渡すことができます。

これは私がしなければならないことの基本的な例です:

MyClass *instance = new MyClass();

// If was passed as the first param to this method, commit is set as below, this code works.
// MyClass *instance = ObjectWrap::Unwrap<MyClass>(args[0]->ToObject());

// Assign some property values to commit
Handle<Value> argv[] = { instance->handle_ };
ar->callback->Call(Context::GetCurrent()->Global(), 1, argv);

これは機能しません。代わりに、セグメンテーション違反が発生します。gdb私に言います:

Program received signal EXC_BAD_ACCESS, Could not access memory.

instanceコードを変更してコールバックに渡せるようにするにはどうすればよいですか?


更新: 問題のクラスは Github: commit.ccで表示できます。

4

1 に答える 1

2

答えは、私のやり方が間違っていたということです。

正しいコード:

Local<Value> instance = MyClass::constructor_template->NewInstance();

// Assign some property values to commit
Handle<Value> argv[] = { instance };
ar->callback->Call(Context::GetCurrent()->Global(), 1, argv);

MyClassインスタンスを取得するには:

MyClass *instanceOfMyClass = ObjectWrap::Unwrap(instance);
于 2013-03-05T19:05:30.357 に答える