- Код: Выделить всё
- library DLLProject;
 {$mode objfpc}{$H+}
 uses
 DLLUnit1
 { you can add units after this };
 {$R *.res}
 begin
 end.
 //==============================
 unit DLLUnit1;
 {$mode objfpc}{$H+}
 interface
 procedure test2(sSomeStr: PString); stdcall;
 implementation
 procedure test2(sSomeStr: PString); stdcall;
 begin
 {В вызывающем приложении возникает ERROR "External: SIGSEGV"}
 (sSomeStr^)[1] := 's';
 (sSomeStr^)[3] := 'd';
 end;
 exports test2;
 end.
Хотя, если заменить
- Код: Выделить всё
- ...
 (sSomeStr^)[1] := 's';
 (sSomeStr^)[3] := 'd';
 ...
- Код: Выделить всё
- ...
 (PChar(sSomeStr^) + 0)^ := 's';
 (PChar(sSomeStr^) + 2)^ := 'd';
 ...
Написал вот тут http://bugs.freepascal.org/view.php?id=20353, ответили что это не баг.
Кстати, этот код вполне нормально работает в Delphi.


