假设我有来自第三方库的以下抽象C ++类,我无法更改。
class Foo : virtual public FooBase {
public:
virtual void bar(void *pBuffer, int64_t address, int64_t length) = 0;
};
我希望能够使用 director 在Java中实现此类。生成的Java类看起来应该是这样的。
private class Foo extends FooBase {
...
public void bar(long address, byte[] pBuffer) {...}
}
我有一个类似于
的类型图%typemap(in) (void *pBuffer, int64_t length) {
$1 = (void*)(jenv)->GetByteArrayElements($input, NULL);
$2 = (jenv)->GetArrayLength($input);
if(!$1)
{
SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "Failed to convert byte array.");
}
}
%typemap(freearg) (void *pBuffer, int64_t length) {
(jenv)->SetByteArrayRegion($input, 0, (jsize) $2, (const jbyte*)$1);
(jenv)->ReleaseByteArrayElements($input, (jbyte*)$1, 0);
}
%typemap(jni) (void *pBuffer, int64_t length) "jbyteArray"
%typemap(jtype) (void *pBuffer, int64_t length) "byte[]"
%typemap(jstype) (void *pBuffer, int64_t length) "byte[]"
%typemap(javain) (void *pBuffer, int64_t length) "$javainput"
但只有在Foo::bar
的输入有订单时才能应用它
int_t address, void* pBuffer, int64_t length
。
是否可以重新排列Foo::bar
中的输入参数,以使多参数类型图有效?