2009-10-23 28 views
1

J'essaie de maîtriser l'utilisation de JNA avec Mac OS X. Je veux accéder à une bibliothèque Carbon, pour laquelle il n'y a pas d'équivalent Cocoa, donc Rococoa ne peut pas m'aider (I pense ...)Création d'un objet CFString avec JNA

Je suis bloqué lorsque j'essaie d'appeler une fonction Carbon qui nécessite CFStringRef comme paramètre. Comment puis-je créer un CFStringRef à partir d'une chaîne Java?

Voici ma tentative à ce jour:

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); 
     } 
    } 

} 

Répondre

1

je suis venu avec ceci:

public static CFStringRef toCFString(String s) { 
     final char[] chars = s.toCharArray(); 
     int length = chars.length; 
     return AXUIElement.INSTANCE.CFStringCreateWithCharacters(null, chars, AXAPI.createCFIndexFor(length)); 
    } 

avec cette définition:

CFStringRef CFStringCreateWithCharacters(
     Void alloc, // always pass NULL 
     char[] chars, 
     CFIndex numChars 
); 
+0

Quelle est la définition de 'CFStringRef' dans votre code java? Est-ce quelque chose qui dérive de 'Structure' ou' Pointer'? –