Myslím, že normální programátor používající DLL v Delphi obecně chápe, že předávat string jako parametr do DLL není možné bez použití berličky typu SimpleShareMem, která propojí memory manager v hlavní aplikaci s memory managerem v DLL. Což ovšem znemožňuje použití DLL z jiných jazyků a proto se musíme snížit na úroveň předávání přes PChar nebo PWideChar.
Ale, je tu jiná možnost. V Delphi existuje typ WideString. Normálně ho nepoužíváme, protože představuje výkonnostní penalizaci (např. není reference counted, alokaci zajišťuje COM alokátor atd). Ale právě druhá vlastnost zajišťuje, že je binárně kompatibilní s typem z COM BSTR, což vzhledem k tomu, že alokaci zajišťuje sdílený COM alokátor, umožňuje jednoduše použít tento typ pro předávání do DLL. Tento typ není dostupný na mobilních platformách.
Mimochodem, když se podíváte do system.pas, tak opravdu uvidíte, že se volá pro nový widestring SysAllocStringLen, ale v případě POSIX (tj. MAX OSX a doufám Linux) se to transformuje na normálně UnicodeString, tj. výchozí typ v unicode Delphi.