PS: ein Delphi-String ist auch nur ein aufgemotztes dynamisches Array ... also sollte man, bei Übergabe von dynamischen Arrays ebenfalls ShareMem einsetzen.
ShareMem sollte immer eingesetzt werden, wenn Speicher, der über den Delphi-Speichermanager läuft, über Modulgrenzen hinweg verwendet/verändert wird.
Bei diesen delphieigenen Typen, welche automatisch verwaltet werden, kann man nie genau sagen wann ein verändernder Zugriff auftreten kann, also sollte man immer ShareMem einsetzen.
Und das mit dem PChar<>Record versteh ich auch nicht,
außerdem fehlt auch noch der Zugriff auf Seite der EXE, welchen du uns vorenthältst.
Wenn Strings/DynArray nur innerhalb einer EXE oder
DLL verwendet werden, aber nicht über die Modulgrenzen hinweg genutzt werden (z.B. nicht als Parameter übergeben),
dann muß ShareMem nicht verwendet werden.
ShareMem ist halt nötig, wenn Beide Resourcen (in diesem Fall den Speichermanager) gemeinsam verwenden wollen.