Вам необходимо использовать Sharemem тогда и только тогда, когда память выделена в одном модуле (то есть DLL / EXE) и освобождена в другом модуле.Это обычно происходит, когда вы работаете, передавая string
между модулями.
В приведенном вами примере нет необходимости использовать Sharemem.Память для PChar
выделяется вызываемым и не освобождается вызываемым абонентом.Строка в вызываемом объекте выделяется и освобождается в вызываемом объекте.
Вот пример, где вам потребуется Sharemem:
function GetString: string;
begin
Result := 'hello';
end;
Здесь память для строки выделяется в вызываемом объекте, нобыть освобожденным вызывающей стороной.
Случай WideString
является совершенно особенным.WideString
- это оболочка для типа COM BSTR
.Он выделяет и освобождает, используя общий распределитель COM.Поэтому он не использует распределитель Delphi, и вы можете безопасно передавать WideString
между модулями без использования Sharemem.