Почему компилятор настаивает на том, что моя функция встроена, а она нет?
Почему я получаю
[Ошибка DCC] ProjectCOWArray.dpr (23): E2426 Встроенная функция не должна иметь блок 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 не имеетAtomicIncrement
Итак, как мне решить эту проблему?
Он хотел бы сохранить ассемблер, потому что в противном случае я не могу иметьlock
префикс в и я не хочу использоватьInterlockedIncrement
потому что это функция WinAPI, и я не хочу такого рода накладные расходы.