簡而言之:Carbon是否適用於此任務,或者我應該轉儲它並尋找Cocoa解決方案?我可以使用Carbon API通過jna啓動應用程序嗎?
試圖編寫一個詢問客戶端系統(Snow Leopard及更高版本)列出應用程序聲明能夠編輯單個給定文件的小程序。用戶選擇一個應用程序,然後我的小程序調用啓動服務啓動應用程序,並將該文件作爲參數。
我可以通過調用LSCopyApplicationURLsForURL來獲取符合條件的應用程序列表。 我可以通過調用FSPathMakeRef將文件路徑轉換爲FSRef對象。 我不能做的是構造並使用LSApplicationParameters對象(其中一個成員是FSRef),以便成功調用LSOPenURLsWithRole(其中一個參數是LSApplicationParameters)。
我迄今所做的是什麼:
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的支持。對於我而言,支持什麼和什麼不支持我的立場並不清楚。
所以我應該得出結論碳是這個活動的死鴨?或者我比我想象的更接近?
的Tx