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;