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);
    }
    

  
    
}
相關文章
相關標籤/搜索