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;