我有一个调用C库进行加密功能的Java应用程序。 这是在C,我们需要从一些Java程序使用实现了自定义库。 我需要一种方法来定义一个SWIG类型映射,让我从Java调用一个函数传递字节组,并把它当作C函数一个无符号的字符指针,其中c函数填充数据并返回到Java
我现在不快乐的接口文件摘译如下:
%module CryptoFacade
%pointer_functions(int, intp);
%pointer_functions(unsigned char, unsigned_charp);
int enCrypt(char* clearText, int clearLen,unsigned char* retCipherText, int *retCipherLen);
从我不高兴的Java代码摘录如下。 在下面的代码中,我预计要加密函数调用会给我一个缓冲区,但它给了我一个“短”按生成的代码。 (参见代码中的注释)
class MainLoader {
static {
System.loadLibrary("dccasecuJ"); //Load my crypto library
}
public static void main(String[] args) {
// Define the parameters to be passed by reference
SWIGTYPE_p_int retCipherLen=CryptoFacade.new_intp();
SWIGTYPE_p_unsigned_char retCipherText =
CryptoFacade.new_unsigned_charp();
CryptoFacade myFacade=new CryptoFacade();
// Call crypto library function. First two are value parameters, next two are return
myFacade.enCrypt("STRING-TO-ENCRYPT", 17, retCipherText, retCipherLen);
// The length I get back in fourth parameter is just fine
int gotLen= CryptoFacade.intp_value(retCipherLen);
//The value I get for the Ciphertext though is a "short" ... no good
// I need a byte[] in java that has the ciphertext
short gotText= CryptoFacade.unsigned_charp_value(retCipherText);
我想我应该我的接口定义更改为类似下面,我让我的第三个参数jbytearray,然后我得到了实现类型表,将复制的内容,将无符号字符指针在C程序到Java字节组。
我完全没有问题,如果我有指定的内容为256个字节的长度,因为处理任意长度可能会非常棘手。
有人能指出我的地方,我能找到这样的类型映射(我是新痛饮,并以书面形式typemaps没有经验)
%module CryptoFacade
%pointer_functions(int, intp);
%pointer_functions(unsigned char, unsigned_charp);
int enCrypt(char* clearText, int clearLen, jbyteArray retCipherText, int *retCipherLen);