나는 C++의 DLL을 갖고 있으며, char*
을 반환하는 함수를 호출해야합니다. 임 네이티브 선언에 문자열을 사용하지만 ????
또는 일부 쓰레기 같은 결과를 받고. String을 디코 드해야합니까? 이미 시스템 속성을 다음과 같이 설정했습니다.JDK를 사용하여 Java에서 CNA 로의 char * 매핑
System.setProperty("jna.encoding","UTF-8");
나는 C++의 DLL을 갖고 있으며, char*
을 반환하는 함수를 호출해야합니다. 임 네이티브 선언에 문자열을 사용하지만 ????
또는 일부 쓰레기 같은 결과를 받고. String을 디코 드해야합니까? 이미 시스템 속성을 다음과 같이 설정했습니다.JDK를 사용하여 Java에서 CNA 로의 char * 매핑
System.setProperty("jna.encoding","UTF-8");
원래 문자열이 유니 코드 인 경우 jna.encoding은 아무 효과가 없습니다. 대신 com.sun.jna.WString을 사용하거나 unicode (wchar_t *) 문자열을 String에 자동으로 매핑하는 방법에 대한 예제 W32API 매핑을 참조하십시오.
문자열을 Java로 다시 변환하려면 Native.toString()
을 사용하셨습니까?
String 대신 포인터를 사용하고 포인터의 getString (long offset) 메서드를 사용하여 문자열을 가져 오려면 jna.encoding을 암시 적으로 사용하십시오. C 법에서
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 방식으로 전달할