0
私の質問は、lArgsはバイトフォーマットであると思われますか?私はargsが異なるオブジェクトのリストであるところではどこにも例を見つけることができません。JNIメソッド複数の異なる引数で呼び出す
オブジェクトの配列を作成しようとしましたが、動作しませんでした。オブジェクトの配列がバイト配列ではなく2つの文字列であるためです。
ありがとうございました。私はちょうど1つの引数を持っている場合は
szMethod db "externalCallIn",0
szMethodArgs db "([BLjava/lang/String;Ljava/lang/String;)V",0
invoke JNI_GetStaticMethodID,dJNIenv,lClass,ADDR szMethod,ADDR szMethodArgs
mov lMethod,eax
invoke JNI_CallStaticVoidMethod,dJNIenv,lClass,lMethod,lArgs
以下は動作しません...
LOCAL lClass:DWORD
LOCAL lMethod:DWORD
LOCAL lByteArray:DWORD
LOCAL lString1:DWORD
LOCAL lString2:DWORD
invoke JNI_CallStaticVoidMethod,dJNIenv,lClass,lMethod,lByteArr,lStr1,lStr2
JNI_CallStaticVoidMethod PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
JNI_CallStaticVoidMethod PROC inJNIenv:DWORD, inClass:DWORD, inMethod:DWORD, inByteArr:DWORD, inStr1:DWORD, inStr2:DWORD
push inStr2
push inStr1
push inByteArr
push inMethod
push inClass
push inJNIenv
mov eax,inJNIenv
mov eax,[eax]
call DWORD PTR [eax].JNIenv.CallStaticVoidMethod
ret
JNI_CallStaticVoidMethod ENDP
は、それが正常に動作します。複数の異なる引数を持つ方法を示す例は見つかりません。一例がありがたくありがとうございます。
これは私が投稿コードと間違って何もありません...
public class MyClass
{
public static void externalCallIn(byte[] _bytes,String _s1,String _s2)
{
...
}
}
'CallStaticVoidMethod'は可変個の引数を取るので、protoは' JNI_CallStaticVoidMethod PROTO C:DWORD、:VARARG'のように見えるでしょう。そして、あなたはそれを呼び出すときに正しい数の引数を供給する必要があります。 'CallStaticVoidMethodA'を使うつもりなら、' jvalue'sの配列を作成し、そのアドレスを 'CallStaticVoidMethodA'に渡す必要があります。これは 'CallStaticVoidMethod' IMOを使うよりも多くの仕事のようです。 – Michael
お返事ありがとうございます。あなたは正しいですが、私は質問をうまく尋ねませんでした。変更点にご注意ください:) – Penny