Since this took me a lot of time and work to figure out (thanks to the guys in the Lazarus forum as well, without their help I would have not gotten this to work), I figured; post it in the forum, maybe others are interested as well.
What this little demo project does is register functions of my application with MacOS, so that when a disk appears, disappears, or changes, my application gets notified by the OS.
For this I have used what Apple calls "DiskArbitration". I've included the required units for that (diskarbitration and dissenter).
The demo also shows how to read a CFArrayRef and how to convert a CFStringRef to a Pascal string;
function CFStringToPascalString(theCFStringRef: CFTypeRef):string;
var FBuf : array[0..512] of Char;
begin
if theCFStringRef<>nil then
begin
FillChar(FBuf, SizeOf(FBuf), 0);
CFStringGetPascalString(theCFStringRef,@FBuf[0],SizeOf(FBuf),CFStringGetSystemEncoding);
Result := trim(StrPas(PChar(@FBuf[1]))); // skip 1st char, it's a strange 1st char causing crashes
end
else
Result:='';
end;
I hope it is to use for one or the other Lazarus Pascal user that works under MacOS.