요약 : Carbon이이 작업에 유효합니까? 아니면 덤프하고 코코아 솔루션을 찾아야합니까?Carbon API를 사용하여 jna를 통해 응용 프로그램을 시작할 수 있습니까?
클라이언트 시스템 (Snow Leopard 이상)을 조사하여 애플리케이션을 나열하는 애플릿을 쓰려고하면 주어진 단일 파일을 편집 할 수 있다고 주장합니다. 사용자가 응용 프로그램을 선택하면 내 애플릿이 Launch Services를 호출하여 파일을 인수로 사용하여 응용 프로그램을 시작합니다.
LSCopyApplicationURLsForURL을 호출하여 적합한 응용 프로그램 목록을 가져올 수 있습니다. FSPathMakeRef를 호출하여 파일 경로를 FSRef 개체로 변환 할 수 있습니다. 내가 할 수없는 일은 LSOPlURLsWithRole (인수 중 하나가 LSApplicationParameters 임)을 성공적으로 호출하기 위해 LSApplicationParameters 객체 (멤버 중 하나가 FSRef 임)를 사용하고 사용하는 것입니다. 지금까지 무슨 짓을
:
interface MyCarbonWrapper extends com.sun.jna.Library
{
public static final MyCarbonWrapper INSTANCE =
(MyCarbonWrapper) Native.loadLibrary("Carbon", MyCarbonWrapper.class);
// .. various function declarations, including
com.sun.jna.Pointer LSCopyApplicationURLsForURL(Object curlRef, int rolesMask);
int FSPathMakeRef(Object path, PointerByReference ref, Void isDirectory);
int LSOpenURLsWithRole(Pointer ptrArray, int roles, Void inAEParam,
Structure myLSApplicationParams, Void outPsns, int inMaxPSCount);
}
// unsuccessful attempt to define a mapped LSApplicationParameters
public static class LSApplicationParameters
{
public int version;
public int flags;
public Pointer Application;
public Void asyncLaunchRefCon;
public Void environment;
public Void argv;
public Void initialEvent;
public static final int sizeof = 28;
}
public void openWith(String filePath)
{
// create a CURLRef for the selected application - OK
// Create a FSRef from the CURLRef - OK
// Create a CFArray to contain the file argument - OK
// create and attempt to populate a LSApplicationParameters instance - problematic
// call LSOpenURLsWithRole - failure. Returned error code is -50
}
난 보통 내가 메시지에 매핑 이해할 수 반환 된 오류 코드 :
"사용자 매개 변수 목록에서 오류".
내가 알 수있는 한, Snow Leopard는 FSRef를 인수로 사용하는 다양한 API에 대한 지원을 중단 한 것으로 보입니다. 내가 무엇을지지하고 무엇이 그렇지 않은지와 함께 서있는 곳은 나에게 분명하지 않습니다.
그래서 Carbon은이 활동을 위해 죽은 오리라고 결론을 내릴 수 있습니까? 아니면 내가 생각했던 것보다 더 가까이 있니? 텍사스