Цитата:
function GetValue(PM ointer; out PN ointer): boolean; stdcall; Export;
var M: integer;
MM: ^integer;
Begin
GetValue:=false;
MM:=PM;
M:=MM^;
N:=M+1;
PN:=@N;
GetValue:=true;
end;
|
Во-первых, не ссылка, а указатель. Надо различать.
Во-вторых, cdecl тут вообще ни при чем, т.к. соглашения вызовов регламентируют порядок параметров в стеке/регистрах и ответственность за стек.
В-третьих, все очевидно. PM - pointer, то есть void *. PN - тоже pointer, однако должен еще иметь возможность изменяться, следовательно в функцию надо передать указатель на указатель.
И получается, что вызывать надо
Код:
int MNumber;
int *ANumber;
...
GetValue(&MNumber, &ANumber);
А конструкция
Код:
int *Mumber,
Mumber=StrToInt(Edit2->Text);
AMumber=&Mumber;
логически неверна, хотя работать будет. Указателю присваивается число.
Делфи же работает "ожидаемо" только потому, что он out/var параметры скрывает. Также можно и для плюсов:
Код:
bool (WINAPI *TGetValue)(int *, int *&);
...
int MNumber;
int *ANumber;
...
GetValue(&MNumber, ANumber);