Вам не нужно выделять память. На самом деле, вам даже не нужно звонить Copy
. Достаточно простого назначения строки; Счетчик ссылок будет правильно отслеживаться по нескольким потокам. Вам также не нужно очищать gMsgPtr
; поскольку это не переменная типа string
, компилятор не будет вставлять для нее код очистки.
begin
New(gMsgPtr);
gMsgPtr^ := aMsg;
PostMessage(ParentHandle, wm_LogFile, aLevel, LParam(gMsgPtr));
end;
Если вы все равно хотите позвонить Copy
, вам не нужно сначала вычислять длину. Он автоматически ограничит параметры индекса до максимально допустимого диапазона. Если вы хотите запросить «остаток строки», вы можете просто передать MaxInt
в качестве третьего параметра, и Copy
будет знать, что делать. Он также делает это для второго параметра, автоматически увеличивая любое значение как минимум до 1, самого низкого допустимого индекса символа.