java调用c库实例

java因为语言限制,不能使用char*做为返回值。 局部变量的字符串不能正常返回,vc能够正常接收,java不能接收。java

c语言json

int __stdcall GetCharacterCodeJn(char* outjson, int* outjson_len)

  

java语言code

package softgranttest;

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;

public class Test {
	
	 // 定义接口CLibrary,继承自com.sun.jna.Library
    public interface testdll extends Library {
        testdll Instance = (testdll) Native.loadLibrary("totfranjo"  , testdll.class);


        int GetYellopCouCod(Pointer outjson_pointer,Pointer outjson_len_pointer);
        
        
    }

    public static void main(String[] args) throws IOException {

    	Test_RRROOO();
    	
    }
    
    /**
     * 特征码
     * 
     * @throws UnsupportedEncodingException
     */
    private static void Test_RRROOO() throws UnsupportedEncodingException
    {
 
        String strRet = "";
        
        Pointer outjson_pointer = new Memory(1024);
        Pointer outjson_len_pointer = new Memory(8);
        
        int nRet = testdll.Instance.GetYellopCouCod(outjson_pointer,outjson_len_pointer);
        
        int outjson_len = outjson_len_pointer.getInt(0);
        byte[] bytOutjson = outjson_pointer.getByteArray(0, outjson_len);
        
        strRet = new String(bytOutjson, "gb2312");
        
        System.out.println(strRet);
    }
    

  
    
}