我知道当我在Delphi应用程序和Delphi动态链接库之间共享字符串
时,需要将Sharemem
添加到应用程序和dll项目源代码的uses子句中。
但是,如果dll导出仅接受Pchars
的函数,但在某些dll方法内部我使用了strings
,那么我是否也需要使用sharemem?让我展示一段示例代码:
procedure ShowMyCustomMessage(aMessage : Pchar);
var
vUselessString : string;
begin
vUselessString := aMessage;
ShowMessage(vUselessString);
end;
exports
ShowMyCustomMessage;
在这种简单且无用的情况下,dll接受一个Pchar,但在导出方法内部,dll创建了一个字符串变量。我应该也添加ShareMem吗?
那WideString呢?传递WideString参数需要使用ShareMem吗?
ShareMem
。但自Delphi 2007以来,这不是一个好主意。您最好使用基于FastMM4的SimpleShareMem,它速度更快。 - Arnaud Bouchez