首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JNA创建CFString对象

使用JNA创建CFString对象
EN

Stack Overflow用户
提问于 2009-10-23 18:13:10
回答 1查看 802关注 0票数 1

我正在尝试在Mac OS X上使用JNA的诀窍。我想访问一个Carbon库,它没有与Cocoa对应的库,所以Cocoa无法帮助我(我认为...)

当我试图调用一个需要CFStringRef作为参数的Carbon函数时,我遇到了问题。如何从Java String创建CFStringRef?

这是我到目前为止的尝试:

代码语言:javascript
复制
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);
        }
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-27 02:14:30

我想出了这个:

代码语言:javascript
复制
   public static CFStringRef toCFString(String s) {
        final char[] chars = s.toCharArray();
        int length = chars.length;
        return AXUIElement.INSTANCE.CFStringCreateWithCharacters(null, chars, AXAPI.createCFIndexFor(length));
    }

有了这个定义:

代码语言:javascript
复制
CFStringRef CFStringCreateWithCharacters(
        Void alloc, //  always pass NULL
        char[] chars,
        CFIndex numChars
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1612520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档