Цитата:
|
Сообщение от Zueuk
Если бы я понимал разницу между указателем и адресом указателя, я бы написал что-то отличное от pBuff:=@chBuff.
|
Ну вот тебе на пальцах:
Указатель любого типа который ты пользуешь в Delphi - это обычная переменная размером 4 байта - можешь считать её типом integer. Любой адрес, представляемый указателем, это 4-х байтовое число. Это число и хранится в 4-х байтах переменной указателя. Сами эти байты 4 байта содержимого переменной-указателя тоже, естественно, находятся по какому то 4-х байтовому адресу в памяти.
В chBuff у тебя должен быть указатель на последовательный набор получаемых символов (т.е. байт). Т.е. в chBuff находится адрес первого из этих символов в памяти. Делая pBuff:=@chBuff ты получаешь в pBuff не адрес этого первого символа строки, а адрес переменной chBuff. Получается указатель на указатель. А тебе надо лишь чтобы в pBuff и в chBuff был один и тот же адрес. Разница лишь в том что т.к. chBuff указатель на char, то сhBuff^ интерпретируется байт, а pBuff^ будет интерпретироваться как 4 байта - это зависит от типа указателя при его объявлении. Тип Pointer - универсальный (в С - это void), т.е. может принимать значение указателя любого другого типа.
Попробуй так:
Код:
var
chBuff: PChar;
...
GetMem(chBuff, 1024);
GetWindowText(hEdit, chBuff, 1024);
MessageBox(hWnd, chBuff, "Caption", MB_OK);
...
FreeMem(chBuff, 1024);