을 만드는 CFString 체 JNA
-
06-07-2019 - |
문제
나는 그들이 거의 걸림을 사용하여 JNA Mac OS X.에 액세스하고 싶 탄소 라이브러리가 없는 코코아 동래 Rococoa 이 나를 도울 수 없어요(제가 생각하는...)
내가 붙어하려고 할 때 호출은 탄소는 함수가 필요합 CFStringRef 매개 변수로 사용할 수 있습니다.어떻게 만들 수 있습니 CFStringRef 에서 Java String?
여기에는 나도 지금까지:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.PointerByReference;
public class JnaTest {
public interface AXUIElement extends Library {
AXUIElement INSTANCE = (AXUIElement) Native.loadLibrary("Carbon", AXUIElement.class);
Pointer AXUIElementCreateApplication(int pid);
// HELP: String is clearly wrong here but what should I use?
int AXUIElementCopyAttributeValue(Pointer element, String attribute, PointerByReference value);
}
public static void main(String[] args) {
final int pid = 5264; // make sure this is a valid pid
final Pointer elementRef = AXUIElement.INSTANCE.AXUIElementCreateApplication(pid);
// HELP: attribute should be of type CFStringRef
final String attribute = "AXWindows";
PointerByReference value = new PointerByReference();
final int error = AXUIElement.INSTANCE.AXUIElementCopyAttributeValue(elementRef, attribute, value);
if (error == 0) {
System.out.println("value = " + value);
} else {
System.out.println("Failure: " + error);
}
}
}
해결책
나이:
public static CFStringRef toCFString(String s) {
final char[] chars = s.toCharArray();
int length = chars.length;
return AXUIElement.INSTANCE.CFStringCreateWithCharacters(null, chars, AXAPI.createCFIndexFor(length));
}
이 정의:
CFStringRef CFStringCreateWithCharacters(
Void alloc, // always pass NULL
char[] chars,
CFIndex numChars
);
제휴하지 않습니다 StackOverflow