Главная страница
    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.046 c
2-1138253763
Radix
2006-01-26 08:36
2006.02.12
Сделать выборку пропущенных номеров из БД на SQL


4-1133287782
bva
2005-11-29 21:09
2006.02.12
Закрыть приложение


2-1138222274
ANB
2006-01-25 23:51
2006.02.12
Как настроить работу ораклового апача через modplsql ?


9-1125143823
DR0N
2005-08-27 15:57
2006.02.12
Лампочки...


15-1137686109
alexsis
2006-01-19 18:55
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский