¿Por qué el compilador insiste en que mi función está en línea cuando no lo está?
¿Por qué me estoy poniendo
[Error de DCC] ProjectCOWArray.dpr (23): E2426 La función en línea no debe tener bloque asm
program ProjectCOWArray;
{$APPTYPE CONSOLE}
{$R *.res}
type
PRefCount = ^TRefCount;
TRefCount = array[0..1] of integer;
TCOWArray<T> = record
private
fData: TArray<T>;
private
procedure IncRefCount; <<-- not inline
end;
{ TCOWArray<T> }
procedure TCOWArray<T>.IncRefCount;
asm
{$if defined(win32)}
mov eax,fData;
lock inc dword ptr [eax - 8];
{$ifend}
{$if defined(win64)}
mov rax,fData;
lock inc dword ptr[rax -12];
{$ifend}
end;
begin
end.
Delphi XE2 no tieneAtomicIncrement
Entonces, ¿cómo resuelvo este problema?
Me gustaría conservar el ensamblador, porque de lo contrario no puedo tener ellock
prefijo y no quiero usarInterlockedIncrement
porque esa es una función WinAPI y no quiero ese tipo de sobrecarga.