IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Память окна, WinAPI
TarasBer
сообщение 29.09.2011 9:38
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Мне понадобилось, чтобы каждое окно помнило какую-нибудь дополнительную информацию.
Вариант с хеш-таблицей по описателю, мне кажется, не совсем архитектурен, ну как бы это объяснить, типа окно в винде, а таблица и информация - в программе.
Вот например, любое окно где-то хранит свои координаты, у него есть какой-то свой личный блок памяти, и этот блок как бы на уровне винды, извиняюсь за такую терминологию. И у каждого класса блок памяти разный по размеру и структуре. Ну и мне кажется целесообразным, чтобы эта дополнительная информация хранилась в этом же блоке памяти. В общем как задавать размер этого блока при создании класса окна, как с ним работать?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
TarasBer
сообщение 30.09.2011 9:21
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


---------------------------
Точка входа в процедуру GetWindowLongPtrA не найдена в библиотеке DLL user32.
---------------------------
ОК
---------------------------


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 30.09.2011 11:16
Сообщение #3


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата(TarasBer @ 30.09.2011 9:21) *
Точка входа в процедуру GetWindowLongPtrA не найдена в библиотеке DLL user32.

Ага. Я свой код компилировал под FPC, использовал готовое описание, сейчас залез в исходники:

Цитата
{$ifdef cpu64}
function GetWindowLongPtrA(hWnd:HWND; nIndex:longint):LONG_PTR; external 'user32' name 'GetWindowLongPtrA';
function SetWindowLongPtrA(hWnd:HWND; nIndex:longint; dwNewLong:LONG_PTR):LONG_PTR; external 'user32' name 'SetWindowLongPtrA';
function GetClassLongPtrA(hWnd:HWND; nIndex:longint):LONG_PTR; external 'user32' name 'GetClassLongPtrA';
function SetClassLongPtrA(hWnd:HWND; nIndex:longint; dwNewLong:LONG_PTR):LONG_PTR; external 'user32' name 'SetClassLongPtrA';
{$else}
function GetWindowLongPtrA(hWnd:HWND; nIndex:longint):LONG_PTR; external 'user32' name 'GetWindowLongA';
function SetWindowLongPtrA(hWnd:HWND; nIndex:longint; dwNewLong:LONG_PTR):LONG_PTR; external 'user32' name 'SetWindowLongA';
function GetClassLongPtrA(hWnd:HWND; nIndex:longint):LONG_PTR; external 'user32' name 'GetClassLongA';
function SetClassLongPtrA(hWnd:HWND; nIndex:longint; dwNewLong:LONG_PTR):LONG_PTR; external 'user32' name 'SetClassLongA';
{$endif}

То есть, можешь заменить на 'GetWindowLongA'. Хотя при более внимательном прочтении MSDN выясняется, что там об этом тоже говорится:
Цитата
Note To write code that is compatible with both 32-bit and 64-bit versions of Windows, use GetWindowLongPtr. When compiling for 32-bit Windows, GetWindowLongPtr is defined as a call to the GetWindowLong function.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.06.2025 3:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"