[fpc-pascal] specifying the relative path to a file that is located in the same folder as the application bundle?
Ken G. Brown
kbrown at mac.com
Thu Feb 5 22:25:28 CET 2009
At 9:51 PM +0100 2/5/09, Jonas Maebe apparently wrote:
>On 05 Feb 2009, at 21:29, Ken G. Brown wrote:
>
>>So far I have the following external definitions:
>
>All external definitions you need are already in the MacOSAll unit shipped with FPC.
>
>>Function CFStringGetFileSystemRepresentation(myPathString : CFStringRef; buffer : ppchar; maxBufLen : CFIndex) : Boolean; cdecl; External;
>>Function _CFStringGetFileSystemRepresentation(myPathString : CFStringRef; buffer : ppchar; maxBufLen : CFIndex) : Boolean; C; External;
>>
>>Function CFStringGetMaximumSizeOfFileSystemRepresentation(myPathStr2 : CFStringRef) : CFIndex; cdecl; External;
>>Function _CFStringGetMaximumSizeOfFileSystemRepresentation(myPathStr2 : CFStringRef) : CFIndex; C; External;
>>
>>Function CFBundleGetMainBundle() : CFBundleRef; cdecl; External;
>>Function _CFBundleGetMainBundle() : CFBundleRef; C; External;
>
>The ones with the extra underscore don't exist.
>
>>and the following snippet
>>
>>var
>> success : boolean = false;
>> mainBundle : CFBundleRef;
>> bundlePath : CFURLRef;
>> bundlePathStr : CFStringRef;
>> myBundlePathStr : ppchar;
>
>myBundlePathStr has to be a pchar;
>
>>begin
>>
>>
>>// Get the main bundle for the app
>> mainBundle := CFBundleGetMainBundle();
>> bundlePath := CFBundleCopyBundleURL(mainBundle);
>>
>> bundlePathStr := CFURLCopyFileSystemPath (bundlePath, kCFURLPOSIXPathStyle);
>>
>>
>>success := CFStringGetFileSystemRepresentation (bundlePathStr, myBundlePathStr, CFStringGetMaximumSizeOfFileSystemRepresentation(bundlePathStr));
>>
>>I'm not quite sure if I am doing the 2nd arg correctly, it's supposed to be char *buffer.
>>
>>Does this look alright? If not, what should I be using for the myBundlePathString type?
>
>You have to allocate memory for it. Something like
>
>myBundlePathStr:=getmem(CFStringGetMaximumSizeOfFileSystemRepresentation(bundlePathStr));
>success := CFStringGetFileSystemRepresentation (bundlePathStr, myBundlePathStr, CFStringGetMaximumSizeOfFileSystemRepresentation(bundlePathStr));
Ah! Sweet! I'm getting the path! Now all that's left is to get the path without the app name and add my filename! :)
Thank you Sir!
Ken
>When interfacing with C routines, you have to do the same things as if you were using C.
>
>>And I notice that CFStringGetFileSystemRepresentation is only available for 10.4 and newer. What do i need to do instead if wanting to deploy to 10.3.9?
>
>Call CFStringGetCStringPtr and/or CFStringGetCStringPtr and tell it to convert to utf-8 (kCFStringEncodingUTF8).
>
>
>Jonas
>_______________________________________________
>fpc-pascal maillist - fpc-pascal at lists.freepascal.org
>http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list