2017-04-11 1 views
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,lSt‌​r1,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) 
    { 
    ... 
    } 
} 
+0

'CallStaticVoidMethod'は可変個の引数を取るので、protoは' JNI_CallStaticVoidMethod PROTO C:DWORD、:VARARG'のように見えるでしょう。そして、あなたはそれを呼び出すときに正しい数の引数を供給する必要があります。 'CallStaticVoidMethodA'を使うつもりなら、' jvalue'sの配列を作成し、そのアドレスを 'CallStaticVoidMethodA'に渡す必要があります。これは 'CallStaticVoidMethod' IMOを使うよりも多くの仕事のようです。 – Michael

+0

お返事ありがとうございます。あなたは正しいですが、私は質問をうまく尋ねませんでした。変更点にご注意ください:) – Penny

答えて

0

Javaクラスです。 バイト配列をまとめたプロシージャコードで、私は構造体ポインタをeaxに戻していませんでした。愚かな間違いをする。 これを修正すると、すべてが期待通りに機能しました。

関連する問題