【发布时间】:2017-09-06 23:11:03
【问题描述】:
我的问题是 lArgs 应该如何被格式化?我在任何地方都找不到任何 args 是不同对象列表的示例。
我尝试将 lArgs 设为对象数组,但没有成功,我猜是因为对象数组不是字节数组和两个字符串。
请帮忙谢谢。
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
如果我只有 1 个参数,它可以正常工作。我找不到任何显示如何拥有多个不同参数的示例。非常感谢一个例子。
这是java类...
public class MyClass
{
public static void externalCallIn(byte[] _bytes,String _s1,String _s2)
{
...
}
}
【问题讨论】:
-
CallStaticVoidMethod接受可变数量的参数,因此您的原型应该类似于JNI_CallStaticVoidMethod PROTO C :DWORD,:VARARG,然后您需要在调用它时提供正确数量的参数。如果您打算使用CallStaticVoidMethodA,您需要创建一个jvalues 数组并将其地址传递给CallStaticVoidMethodA。这似乎比仅仅使用CallStaticVoidMethodIMO 更有效。 -
感谢您的回复。你是对的,但我没有很好地问这个问题。请注意更改谢谢:)
标签: methods java-native-interface call