Будет ли падать при таком варианте вызова?
- Код: Выделить всё
uses dynlibs;
const
LC_ALL = 6;
BASH_MSG = '%s: command not found';
function SetLocale(Context: Integer; Locale: PChar): PChar; cdecl; external name 'setlocale';
type
TDGetText = function(Domain, MsgId: PChar): PChar; cdecl;
var
DGetText: TDGetText;
LibGT: TLibHandle;
begin
{ локаль приложения }
SetLocale(LC_ALL, '');
{ получаем адрес DGetText }
LibGT := SafeLoadLibrary('libgettextlib.so');
if NilHandle = LibGT then begin WriteLn('Error: SafeLoadLibrary()'); exit; end;
pointer(DGetText) := GetProcedureAddress(LibGT, 'dgettext');
{ получаем перевод(ы) }
if nil <> DGetText
then WriteLn(DGetText('bash', BASH_MSG))
else WriteLn('Error: GetProcedureAddress()');
{ освобождаем библиотеку }
UnloadLibrary(LibGT);
end.
Полученное от DGetText() нужно скопировать куда-то в родную строку для дальнейшего использования, либо продолжать использовать как ообычный указатель PChar (благо совместим), ибо
man dgettext писал(а):RETURN VALUE
... The resulting string is statically allocated and must not be modified or freed. ...