Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Импорт процедур и функций [D7, XP]


wq ©   (2009-02-11 20:21:00) 

Мастера подскажите как правильно импортировать функциии процедуры.
Нужно импортировать GlobalMemoryStatus.
В MSDN описана как

void GlobalMemoryStatus(
 LPMEMORYSTATUS lpBuffer
);


Пытаюсь так
procedure GlobalMemoryStatus( var lpBuffer:TMEMORYSTATUS); stdcall; external 'kernell32.dll';

Структура TMEMORYSTATUSпереопределена в моем модуле. Думаю что дело в этом external 'kernell32.dll'.Поскажите где подробно почитать/посмотреть на эту тему.


wq   (2009-02-12 18:41:00) [1]

clickmakerСпасибо!!! Вопрос закрыт


clickmaker   (2009-02-12 18:38:00) [2]

> GlobalMemoryStatus определяет память до 4 ГБ?

да

"On computers with more than 4 GB of memory, the MEMORYSTATUS structure can return incorrect information. Windows reports a value of -1 to indicate an overflow, while Windows NT reports a value that is the real amount of memory, modulo 4 GB"


wq   (2009-02-12 18:29:00) [3]


> для int64 нужна GlobalMemoryStatusEx


Спасибо смотрел уже в ее сторону. Т.е. GlobalMemoryStatus определяет память до 4 ГБ?

За kernell32.dll отдельный респект.


clickmaker   (2009-02-12 18:21:00) [4]

кстати, о птичках
для int64 нужна GlobalMemoryStatusEx


clickmaker   (2009-02-12 18:19:00) [5]

> 'kernell32.dll'

'l' не лишняя?


wq   (2009-02-12 18:18:00) [6]


> В чем у тебя возникла проблема ?

Вот код:

type
_MEMORYSTATUS = record
  dwLength        : DWORD;
  dwMemoryLoad    : DWORD;
  dwTotalPhys     : Int64;
  dwAvailPhys     : Int64;
  dwTotalPageFile : Int64;
  dwAvailPageFile : Int64;
  dwTotalVirtual  : Int64;
  dwAvailVirtual  : Int64;
 end;
TMEMORYSTATUS = _MEMORYSTATUS;

procedure GlobalMemoryStatus( var lpBuffer:TMEMORYSTATUS); stdcall; external 'kernell32.dll';

function mxGetMemoryInfo:TMEMORYSTATUS;

implementation

function mxGetMemoryInfo:TMEMORYSTATUS;
var
MS:TMEMORYSTATUS;
begin
MS.dwLength:=SizeOf(MS);
GlobalMemoryStatus(MS);
Result:=MS;
end;


При попытке его использовать получаю "Не удается найти kernel32.dll".


Германн   (2009-02-12 03:20:00) [7]


> Джо ©

Разжевать забыл. :)


Джо   (2009-02-12 02:55:00) [8]

Или же, если это чревато слишком трудоемкой работой, переопределите функцию GlobalMemoryStatus, чтобы она указывала на другое имя типа, который сами же тут же и опишите...


Джо   (2009-02-12 02:53:00) [9]


> Структура TMEMORYSTATUS переопределена в моем модуле

Ну, тогда переопределите ее под другим именем в вашем моделе.


Сергей М.   (2009-02-11 21:14:00) [10]


> все таки как?


Что "как" ?
В чем у тебя возникла проблема ?


wq   (2009-02-11 20:46:00) [11]


> Она уже есть: \Delphi\Source\Rtl\Win

Да это понятно Windows.pas

> procedure GlobalMemoryStatus(var lpBuffer: TMemoryStatus);
>  stdcall;


Ну а все таки как?


clickmaker   (2009-02-11 20:36:00) [12]

> где подробно почитать/посмотреть на эту тему

Delphi Help, раздел External declarations


clickmaker   (2009-02-11 20:34:00) [13]

ее не надо импортировать. Она уже есть: \Delphi\Source\Rtl\Win


Наверх

Титульная страница Поиск, карта сайта Написать письмо