java调用c库实例
java由于语言限制,不能使用char*作为返回值。 局部变量的字符串不能正常返回,vc可以正常接收,java不能接收。
c语言
int __stdcall GetCharacterCodeJn(char* outjson, int* outjson_len)
java语言
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);
}
}

浙公网安备 33010602011771号