2009-08-03 5 views
2

나는 C++의 DLL을 갖고 있으며, char*을 반환하는 함수를 호출해야합니다. 임 네이티브 선언에 문자열을 사용하지만 ???? 또는 일부 쓰레기 같은 결과를 받고. String을 디코 드해야합니까? 이미 시스템 속성을 다음과 같이 설정했습니다.JDK를 사용하여 Java에서 CNA 로의 char * 매핑

System.setProperty("jna.encoding","UTF-8"); 

답변

0

원래 문자열이 유니 코드 인 경우 jna.encoding은 아무 효과가 없습니다. 대신 com.sun.jna.WString을 사용하거나 unicode (wchar_t *) 문자열을 String에 자동으로 매핑하는 방법에 대한 예제 W32API 매핑을 참조하십시오.

0

문자열을 Java로 다시 변환하려면 Native.toString()을 사용하셨습니까?

0

String 대신 포인터를 사용하고 포인터의 getString (long offset) 메서드를 사용하여 문자열을 가져 오려면 jna.encoding을 암시 적으로 사용하십시오. C 법에서

2
import com.sun.jna.*; 

숯 * 반환 :

void myFunc(Pointer ptr); 
String str = "hello world"; 
Memory mem = new Memory(str.length()); 
mem.write(0, str.getBytes(), 0, str.length()); 
myFunc(mem); 
:

Pointer myFunc(); 
Pointer ptr = myFunc(); 
String str = ptr.getString(0); 
str = str.substring(0, str.indexOf(0)); //Remove garbage after null char 

* CHAR PARAM을 C 방식으로 전달할

관련 문제