私は現在、組み込みdevie(POS端末)上で動作するJavaアプリケーションを作成しています。 このデバイスには、manufacter固有の仮想マシンがあります。JNIを使用せずにJavaからネイティブ関数を呼び出す(スタック操作を使用)
ハードウェアとやり取りする機能は、この仮想マシン内のCのファイル(プロファイルAFAIK内)に定義されています。
正式な文書によると、仮想マシンはJNIもKNIもサポートしていないため、CとJavaコードのインタフェース方法として「スタック操作」しかサポートしていないため、これらの関数を自分のJavaコードから呼び出すことはできません。
私が見る限り、ネイティブ関数の引数はスタックを使って渡されます。関数を呼び出す前に引数をプッシュし、関数内にポップします(プロトタイプには引数がありません)。 私は関数を呼び出すために、多分コールスタックに関連する何かのような何かを推測する?
実際の質問は、「スタック操作」を使用してCとJavaをどのようにインターフェイスするのですか?
UPDATE:呼び出される関数の例(Cコード)デバイスの画面にメッセージを表示します。
void PrintAt(void)
{
Array msg = popStackAsType(Array);
int y = popStack();
int x = popStack();
NativePrint(x,y,msg->bdata);
}
サンプルを提供していますか?私は1つを見ることに興味があるだろう。 manufacterは誰ですか、デバイスのモデルは何ですか? – Java42
私は1つ見つけようとしましたが、残念ながらそこには何もありません – user363834
ネイティブ関数プロトタイプの1つの例を挙げてください。それに付随する説明は何ですか? –