- Код: Выделить всё
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.