私は自分のゲームに対してV8をコンパイルしてリンクすることができ、コードの解釈はうまくいきました。ただし、コードを分割したいので、ゲームループは1つのスレッドに存在し、スクリプトエンジンはゲームループと一緒に2番目のスレッドで実行する必要があります。私はSDLを使用しているため、このコードを試して新しいスレッドを生成しました
SDL_CreateThread(ScriptingEngine::SpawnMain, NULL);
ここで、次のコードは私のテストスクリプトエンジンです。
namespace ScriptingEngine {
v8::HandleScope handleScope;
v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
v8::Persistent<v8::Context> context;
void Setup() {
// TODO: bind functions to global
// ...
context = v8::Context::New(NULL, global);
}
int SpawnMain(void *arguments) {
v8::Context::Scope scope(context);
v8::Handle<v8::Script> script = v8::Script::Compile(
v8::String::New("'Hello World'")
);
v8::Handle<v8::Value> result = script->Run();
context.Dispose();
return EXIT_SUCCESS;
}
}
しかし、私のようなエラーが出るAccess violation reading location 0x00000000.
におけるapi.cc
行716: i::Isolate* isolate = env->GetIsolate();
。
誰かがこれをどのように修正できるか、正確な問題は何かを知る手がかりはありますか?
答えを返すための+1。あなたは本当にあなた自身の質問に答えるべきであり、それを回答済みとしてマークすることができます(S / Oチームは、可能であればあなた自身の質問に答えることを勧めます)。
—
ジョナサンディキンソン
@JonathanDickinson:評判が足りないので、自分の質問に答えられるまで8時間ブロックされます。私はこれを明日やります;-)
—
クリスチャン・イヴィチェビッチ