Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

Функция из DLL не вызывается   Найти похожие ветки 

 
dmk ©   (2006-01-10 00:46) [0]

Помогите разобраться. Функция в DLL существует,
а при вызове возвращает код ошибки 87 (ERROR_INVALID_PARAMETER)
В общем вызова не происходит.
Может структуру неправильно описал?

program NewMemTest;

uses
 Forms,
 new_i in "new_i.pas" {MemForm},
 windows in "windows.pas",
 dialogs in "dialogs.pas",
 sysutils in "sysutils.pas";

{$R *.RES}

type
 PMemoryStatusEx = ^TMemoryStatusEx;
 _MEMORYSTATUSEX = record
   dwLength: DWORD;
   dwMemoryLoad: DWORD;
   dwTotalPhys: INT64;
   dwAvailPhys: INT64;
   dwTotalPageFile: INT64;
   dwAvailPageFile: INT64;
   dwTotalVirtual: INT64;
   dwAvailVirtual: INT64;
 end;
 TMemoryStatusEx = _MEMORYSTATUSEX;

type
 TGetMemoryExProc = Function(var lpBuffer: TMemoryStatusEx): BOOL; StdCall;

{
 DWORD dwLength;
 DWORD dwMemoryLoad;
 DWORDLONG ullTotalPhys;
 DWORDLONG ullAvailPhys;
 DWORDLONG ullTotalPageFile;
 DWORDLONG ullAvailPageFile;
 DWORDLONG ullTotalVirtual;
 DWORDLONG ullAvailVirtual;
 DWORDLONG ullAvailExtendedVirtual;
}

var
 Handle: THandle;
 ResStr: string;
 MemStatusRecEx: TMemoryStatusEx;
 GetMemEx: TGetMemoryExProc;
 AllocSize: Int64;
 GetRes: Boolean;
 ErrCode: DWord;

begin
 Handle := LoadLibrary(PChar(kernel32));
 if Handle <> 0 then
   begin
     @GetMemEx := GetProcAddress(Handle, "GlobalMemoryStatusEx");
     if (@GetMemEx = nil) then
       begin
         MessageDlg("Call failed. ""GlobalMemoryStatusEx""", mtError, [mbOk], 0);
         FreeLibrary(Handle);
         Exit;
       end;

     GetRes := GetMemEx(MemStatusRecEx);
     If GetRes then
       begin
        AllocSize := MemStatusRecEx.dwAvailPhys;
        ResStr := FloatToStrF(AllocSize / 1024 / 1024, ffNumber, 18, 2) + " Mb";
        MessageDlg(ResStr, mtError, [mbOk], 0);
       end
     else
       begin
         ErrCode := GetLastError;
         MessageDlg("Error is: " + IntToStr(ErrCode), mtError, [mbOk], 0);
       end;
       FreeLibrary(Handle);
       Exit;

   end
  else Exit;

 //...

 Application.Initialize;
 Application.Title := "FreeMem";
 Application.CreateForm(TMemForm, MemForm);
 Application.Run;

 //...

 FreeLibrary(Handle);
end.


 
dmk ©   (2006-01-10 00:54) [1]

В MSDN она описывается так
BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer);

структуру LPMEMORYSTATUSEX видно в коде.

Для описания структуры ничего подходящего на замену DWORDLONG, кроме Int64, не нашел.


 
Reindeer Moss Eater ©   (2006-01-10 01:01) [2]

Навскидку:
cтруктура перед вызовом не проинициализирована.


 
Reindeer Moss Eater ©   (2006-01-10 01:04) [3]

Для описания структуры ничего подходящего на замену DWORDLONG, кроме Int64, не нашел.

Но int64 - это signed тип


 
Reindeer Moss Eater ©   (2006-01-10 01:14) [4]

>cтруктура перед вызовом не проинициализирована.
перед вызовом в dwLength следует записать длину структуры.


 
dmk ©   (2006-01-10 01:23) [5]

Спасибо Вам огромное.
Невнимательность =(

PS. Все работает.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
6-1130929111
oleggar
2005-11-02 13:58
2006.02.12
openssl


2-1138030902
Коля
2006-01-23 18:41
2006.02.12
Куда посоветуете спрятать пароль?


2-1138022575
Змей
2006-01-23 16:22
2006.02.12
цвет из colordialog1 в HTML


15-1138099877
ioi0i
2006-01-24 13:51
2006.02.12
selectdirectory


2-1138123522
MasacreAnt
2006-01-24 20:25
2006.02.12
Форма невидимая, но все равно копирует на себя экран за собой...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский