Page 1 of 1
Forum

Welcome to the Tweaking4All community forums!
When participating, please keep the Forum Rules in mind!

Topics for particular software or systems: Start your topic link with the name of the application or system.
For example “MacOS X – Your question“, or “MS Word – Your Tip or Trick“.

Please note that switching to another language when reading a post will not bring you to the same post, in Dutch, as there is no translation for that post!



Share:
Notifications
Clear all

[Solved] Lazarus - MacOS - DiskArbitration with callbacks on disk updates in Pascal

1 Posts
1 Users
0 Likes
1,325 Views
 Hans
(@hans)
Famed Member Admin
Joined: 11 years ago
Posts: 2678
Topic starter  

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.


   
ReplyQuote
Share: