DLL a WideString

vložil Radek Červinka 26. listopadu 2016 23:37

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.

Tagy: , ,

Delphi | Praxe

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců