Тема: Delphi+API
Показать сообщение отдельно
Старый 24.12.2004, 18:48     # 7
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Цитата:
Сообщение от 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);
ЕЖ вне форума