Subj.Я хотел бы использовать строки вместо PChar, потому что это избавляет меня от большого количества приведения, но если я просто сделаю
procedure SomeExternalProc(s: string); external SOMEDLL_DLL;
, а затем реализую его в каком-то другом проекте с менеджером не разделяемой памяти:
library SeparateDll;
procedure SomeExternalProc(s: string);
begin
//a bla bla bla
//code here code here
end;
У меня (формально) нет никаких гарантий, Delphi не решает по какой-либо причине изменить строку, изменить ее счетчик ссылок, продублировать или уникально, или что-то еще.Например,
var InternalString: string;
procedure SomeExternalProc(s: string);
begin
InternalString := s;
end;
Delphi увеличивает refcounter и копирует указатель, вот и все.Я бы хотел, чтобы Delphi скопировал данные.Делает ли объявление параметра «const» безопасным по этой причине?Если нет, есть ли способ сделать это?Объявление параметра как PChar не похоже на решение, потому что вам нужно приводить его каждый раз:
procedure SomeExternalProc(s: Pchar); forward;
procedure LocalProc;
var local_s: string;
begin
SomeExternalProc(local_s); //<<--- incompatible types: 'string' and 'PAnsiChar'
end;