今日のv8に別のjsファイルファイルを含めるにはどうすればよいですか?
ここで古い回答とその後の更新を見つけましたが、このコードを最新(2020)のV8バージョンに適合させるのは困難です。
私が遭遇する多くの困難があります:
String::New
が削除され、関数に渡す方法がわからないString::NewFromUtf8Literal
ニーズが発生しました。前にこれを追加する必要がありますか?Isolate* isolate
Include
const Arguments& args
Script::Compile
かかるContext
今のparamaterとしてオブジェクトを- そして、最後の2行のコードをどこに置くかわかりません
Handle<ObjectTemplate> global = ObjectTemplate::New(); global->Set(String::New("include"), FunctionTemplate::New(Include));
-更新-
いくつかの作業の後、私はこのような私のコードを持っています。
ただし、エラーがあるため、コンパイルされません。
ダニジャーの戦略を使っ
Local
たPersistent
としても、からは得られないようです。コンストラクターを使用したことがないためかもしれませんが、この関数スコープ内でPersistをここで構築することはできないと思います。samples/import.cc:74:103: Error:cannot convert ‘v8::Local<v8::Context>’ to ‘v8::Context*’ 74 | global_context = v8::Persistent<v8::Context, CopyablePersistentTraits<v8::Context>>::New(isolate, local_context); | ^~~~~~~~~~~~~ | | | v8::Local<v8::Context>
ここにいくつかのエラーがあり
String::NewFromUtf8Literal
ますsamples/import.cc:34:110: Error:‘static v8::Local<v8::String> v8::String::NewFromUtf8Literal(v8::Isolate*, const char*, v8::NewStringType, int)’ is private within this context 34 | Handle<String> source = String::NewFromUtf8Literal(args.GetIsolate(), buff, v8::NewStringType::kNormal, len); |
回答
Include関数に渡す方法がわかりません
const Arguments& args
。前にこれを追加する必要がありますか?
いいえ、JSから呼び出される関数のシグネチャを変更することはできませんが、変更する必要はありません:(FunctionCallbackInfo
の代わりになりますArguments
)にはGetIsolate()
メソッドがあります。
Script::Compile
かかるContext
今、パラメータとしてオブジェクトを
これについて質問があるので、すべてに単一のコンテキストのみを使用していると思います。に保存し、必要なときにいつでもv8::Persistent
作成できますv8::Local
。(当面は非推奨を使用することもできますIsolate::GetCurrentContext()
が、新しく記述されたコードについては、将来、移行する必要がある場合にのみ、より多くの作業を作成するため、これはお勧めしません。)
最後の2行のコードをどこに置くかわかりません
グローバルオブジェクトを設定する場所はどこでも、アプリの起動シーケンスのどこかにあります。
これらすべての質問(およびそれ以上)は、V8プロジェクトが維持している「シェル」サンプルアプリを調べることで答えることができます。 https://chromium.googlesource.com/v8/v8/+/master/samples/shell.cc。特に、そのLoad
機能はあなたが望むことをほぼ実行します。