Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2015-03-09 17:22:14 ЛС | профиль | цитата
Приветствую всех!

Понадобился мне InterlockedCompareExchange, я пишу:

#pas
type
private
fa:integer;
pa:^integer;

b:integer;
c:integer;

//.....

begin

pa:= @fa;

InterlockedCompareExchange(^pa,b,c);

end;

И получаю ошибку: Error: Types of actual and formal var parameters must be identical

что я делаю не так?
карма: 0

0
файлы: 1code_35306.txt [162B] [421]
Ответов: 4630
Рейтинг: 749
#2: 2015-03-09 17:24:01 ЛС | профиль | цитата
InterlockedCompareExchange(pa^,b,c);

карма: 26

0
Ответов: 1429
Рейтинг: 50
#3: 2015-03-10 06:33:11 ЛС | профиль | цитата
Netspirit,
Сделал pa^, та-же ошибка
------------ Дoбавленo в 06.33:
форум вчера пропал из онлайна, надолго

Вот тестовая схемка:

Add(MainForm,2953706,224,154)
{
Position=1
link(onCreate,11758102:in1,[])
}
Add(InlineCode,11758102,273,168)
{
@Hint=#19:Switcher (из макса)|6:Пауза!|
@Color=11184725
WorkPoints=#3:in1|9:doSelect1|9:doSelect2|
EventPoints=#4:out1|4:out2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|6: |14: a:integer;|16: pa:^integer;|3: |14: b:integer;|14: c:integer;|4: |9: public|34: out1:THI_Event; //выход 1 |56: procedure in1(var Data:TData; index:word); // Вход 1|18: |5: end;|0:|14:implementation|0:|37: procedure THiAsmClass.in1; // Вход 1|4: |9: begin |12: a := 5;|13: c := 10;|13: b := 20;|4: |15: pa := @a; |47: InterlockedCompareExchange(pa^,b,c); |24: _hi_OnEvent(out1, pa^)|8: |5: end;|0:|4:end.|
PColor(out1,-1)
PColor(out2,-1)
link(out1,2953706:doCaption,[(315,174)(315,139)(212,139)(212,160)])
}


карма: 0

0
Ответов: 4630
Рейтинг: 749
#4: 2015-03-10 11:21:45 ЛС | профиль | цитата
code_35307.txt
Нужно смотреть, как эта функция у нас объявлена в windows.pas. В FPC она закомментирована, а в Delphi, вероятно, объявлена иначе; у меня нет исходника этого файла. У кого-то есть?
карма: 26

1
файлы: 1code_35307.txt [1.1KB] [510]
Голосовали:login
Ответов: 1429
Рейтинг: 50
#5: 2015-03-10 12:43:33 ЛС | профиль | цитата
Netspirit, Оооо!! Спасибо, работает
------------ Дoбавленo в 12.43:
Похоже оно как-то неверно работает:

Add(MainForm,16750181,483,238)
{
Position=1
link(onCreate,11758102:in1,[])
}
Add(InlineCode,11758102,532,252)
{
@Hint=#19:Switcher (из макса)|6:Пауза!|
@Color=11184725
WorkPoints=#3:in1|9:doSelect1|9:doSelect2|
EventPoints=#4:out1|4:out2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|6: |15: a: Integer;|15: pa:Pointer;|6: |15: b: Integer;|15: c: Integer;|4: |9: public|34: out1:THI_Event; //выход 1 |56: procedure in1(var Data:TData; index:word); // Вход 1|18: |5: end;|1: |171:function InterlockedCompareExchange(var Destination: Pointer; Exchange: Longint; Comperand: Longint): Longint stdcall; external kernel32 name 'InterlockedCompareExchange';|0:|14:implementation|0:|37: procedure THiAsmClass.in1; // Вход 1|4: |9: begin |12: a := 5;|13: c := 10;|13: b := 20;|4: |13: pa := @a;|4: |45: a := InterlockedCompareExchange(pa,b,c);|11: |22: _hi_OnEvent(out1, a)|8: |5: end;|0:|4:end.|
PColor(out1,-1)
PColor(out2,-1)
link(out1,16750181:doCaption,[(574,258)(574,223)(471,223)(471,244)])
}



Там первым параметром должен быть указатель на переменную, которую эта функция модифицирует в результате своей работы. Но шото не выходит, переменная не меняется, а на выходе из функции рандомные числа..
карма: 0

0
Ответов: 4630
Рейтинг: 749
#6: 2015-03-10 12:54:38 ЛС | профиль | цитата
Всё там нормально: code_35309.txt
Смотри комментарии.
карма: 26

1
файлы: 1code_35309.txt [1.4KB] [596]
Голосовали:login
Ответов: 1429
Рейтинг: 50
#7: 2015-03-10 13:05:16 ЛС | профиль | цитата
Netspirit, точно, спасибо!
карма: 0

0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)