これはおそらく間違ったタイトルですが、それ以外の記述方法はわかりません。私がやろうとしているのは、スクリプト言語(VMで動作)からC++関数を呼び出すことです。私は関数にパラメータを渡す方法を理解するのにいくつかの問題に遭遇しました。それにパラメータを与えて、私は最初のVMにそれを公開する機能を呼び出すために、そして、動的なC++関数のパラメータ
void func(int a) {
// Start param copy
char c;
char* par_start = &c - sizeof(char) - getCurrentFuncParamOffset();
copyCurrentParams(par_start);
// End copy
// Code
}
:
私の最善の解決策は、これまでのところ、これを行うことです。これは短縮されたコードですが、すべてがvoid(*)にキャストされるため、ハッシュテーブルに格納できます。
EXPOSE(test, int);
vm.call("test", 12)
EXPOSE grabは、機能テストへのポインタであり、単一の呼び出しが必要であることを格納します。ハッシュテーブルにvoid(*)()としてポインタを格納するので、呼び出すときにVMから呼び出して解決できます。次に、関数内のコード(質問のマクロから展開したもの)は、呼び出しからVMに渡されたパラメータを関数のパラメータにコピーします。
これはうまくいきますが、これは最も洗練された解決策ではありません。特に、スクリプト作成のために公開したい機能ごとにマクロを呼び出す必要があるからです。より良い解決策はありますか?ありがとう。
"Then I do"の下にある部分は、実際に上記の部分に接続していません。本当に理解するのは難しいです。 – AndyG
@AndyG私は謝罪します、うまくいけば、編集はそれをクリアします – BlueSpud
かなりです。 'EXPOSE'マクロとは何ですか? 'cppFunction'とは何ですか? 'void(* ptr)()=(void(*)());のポイントは何ですか? – AndyG