Вкратце: допустим ли Carbon для этой задачи, или я должен выбросить его и найти решение Какао?
Попытка написать апплет, который опрашивает клиентскую систему (Snow Leopard и более поздние версии) для вывода списка приложений.утверждают, что могут редактировать один файл.Пользователь выбирает приложение, и мой апплет затем вызывает Launch Services для запуска приложения с файлом в качестве аргумента.
Я могу получить список подходящих приложений, вызвав LSCopyApplicationURLsForURL.Я могу преобразовать путь к файлу в объект FSRef, вызвав FSPathMakeRef.Что я не могу сделать, так это создать и использовать объект LSApplicationParameters (один из членов которого является FSRef) для успешного вызова LSOPenURLsWithRole (один из аргументов которого является LSApplicationParameters).
Что я сделал до сих пор:
interface MyCarbonWrapper extends com.sun.jna.Library<br />
{<br />
public static final MyCarbonWrapper INSTANCE =<br />
(MyCarbonWrapper) Native.loadLibrary("Carbon", MyCarbonWrapper.class);<br />
// .. various function declarations, including<br />
com.sun.jna.Pointer LSCopyApplicationURLsForURL(Object curlRef, int rolesMask);<br />
int FSPathMakeRef(Object path, PointerByReference ref, Void isDirectory);<br />
int LSOpenURLsWithRole(Pointer ptrArray, int roles, Void inAEParam,<br />
Structure myLSApplicationParams, Void outPsns, int inMaxPSCount);<br />
}<br />
<br />
// unsuccessful attempt to define a mapped LSApplicationParameters<br />
public static class LSApplicationParameters<br />
{<br />
public int version;<br />
public int flags;<br />
public Pointer Application;<br />
public Void asyncLaunchRefCon;<br />
public Void environment;<br />
public Void argv;<br />
public Void initialEvent;<br />
public static final int sizeof = 28;<br />
}<br />
<br />
public void openWith(String filePath)<br />
{<br />
// create a CURLRef for the selected application - OK<br />
// Create a FSRef from the CURLRef - OK<br />
// Create a CFArray to contain the file argument - OK<br />
// create and attempt to populate a LSApplicationParameters instance - problematic<br />
// call LSOpenURLsWithRole - failure. Returned error code is -50<br />
}<br />
Возвращенный код ошибки, который я обычно получаю, я понимаю, чтобы отобразить на сообщение:«Ошибка в списке параметров пользователя».
Насколько я могу судить, Snow Leopard, похоже, отказался от поддержки ряда API, которые принимают FSRef в качестве аргумента.Мне совсем не ясно, где я стою с тем, что поддерживается, а что нет.
Итак, я должен заключить, что Карбон - мертвая утка для этой деятельности?Или я ближе, чем я думаю?
Tx