JNI方法使用多个不同的参数调用

时间:2017-04-11 13:56:10

标签: methods java-native-interface call

我的问题是lArgs应该如何进行字节格式化?我无法在args是不同对象列表的任何地方找到任何示例。

我试过让lArgs成为一个对象数组,但它不起作用,我想因为一个对象数组不是字节数组和两个字符串。

请帮助谢谢。

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

mv /usr/local/var/postgres /usr/local/var/postgres92

brew update

brew upgrade postgresql

initdb /usr/local/var/postgres -E utf8

pg_upgrade -b /usr/local/Cellar/postgresql/9.2.3/bin -B /usr/local/Cellar/postgresql/9.3.5_1/bin -d /usr/local/var/postgres92 -D /usr/local/var/postgres

cp /usr/local/Cellar/postgresql/9.3.5_1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

rm -rf /usr/local/var/postgres92

以下不起作用......

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

如果我只有一个参数,它可以正常工作。我找不到任何显示如何有多个不同参数的例子。非常感谢一个例子。

这是java类......

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

1 个答案:

答案 0 :(得分:0)

我发布的代码没有任何问题。 在我将字节数组放在一起的过程代码中,我没有在eax中返回结构指针。这是一个愚蠢的错误。 一旦我纠正了这一切,一切都按预期工作。