这是如何使用从 C++ 到 Java 的 ByteBuffer 返回问题的后续行动——我将感谢 Flexo 迄今为止的不懈支持——我想我只是还没有掌握类型映射...... :-(
我有一个带有如下四个参数的 C 函数,其中第三个和第四个参数通过引用传递
extern "C" int foo(const char* passByValText, const int passbyValLen,
unsigned char* retTextByRef, int *retTextLen)
Calling Java Wrapper 函数需要看起来像这样
int foo(String passByValText, int passbyValLen, byte[] retBuf, SWIGTYPE_p_int retTextLen);
或者它可以是
int foo(String passByValText, int passbyValLen, ByteBuffer retBuf, SWIGTYPE_p_int retTextLen);
我可以为我写的类型图道歉 - 但基本上这可能会使事情更加混乱......所以我保持这个干净......
下面是c端的示例代码
extern "C" int foo (const char* passByValText, const int passbyValLen, char *retTextByRef, int *retTextLen){
// binary value stuffed in the retTextByRef. In real program I compute this
unsigned char someText[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x00};
memcpy(cipherText,someText,9);
// I set the length of the value I stuffed into the buffer in c program
*cipherLen=9;
return 0;
}
以及调用这个 c 函数的 Java 程序
class Caller{
public static void main(String[] args) {
//Define the parameter to pass by reference!!
SWIGTYPE_p_int retTextLen=MYMODULE.new_intp();
//Create a Java Wrapper Instance
JavaWrapClass myWrap=new JavaWrapClass();
StringBuffer sBuf = new StringBuffer(50);
int retTextLenVal=0;
myWrap.foo("PASSED-STRING-BY-VALUE", 24, sBuf, retTextLen);
retTextLenVal= MYMODULE.intp_value(retTextLen);
System.out.println("JAVA :: got length "+ retTextLenVal);
System.out.println("JAVA :: got BUFFER "+ sBuf);
}
}
万分感谢!!!