Страница: 1 |
|
Вопрос: GlobalMemoryStatusEX
|
Добавлено: 19.04.11 20:32
|
|
Автор вопроса: Igor
|
Возникла трудность при считывании текущей информации о физической памяти системы. При ОЗУ до 2Гб работает GlobalMemoryStatus, если более 2Гб то предполагается использование GlobalMemoryStatusEX. Код написан следующий:
Public Declare Function MEMSTAT Lib "kernel32.dll" _
Alias "GlobalMemoryStatus" (ByVal lpBuffer As MEMORYSTATUS) As Boolean
Public Structure MEMORYSTATUS
Public dwLength As UInt32
Public dwMemoryLoad As UInt32
Public dwTotalPhys As UInt32
Public dwAvailPhys As UInt32
Public dwTotalPageFile As UInt32
Public dwAvailPageFile As UInt32
Public dwTotalVirtual As UInt32
Public dwAvailVirtual As UInt32
End Structure
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MemoryInfo As MEMORYSTATUS
Call MEMSTAT(MemoryInfo)
End Sub
При замене GlobalMemoryStatus на GlobalMemoryStatusEX данный код не работает, выдает:
Не удается найти точку входа "GlobalMemoryStatusex" в DLL "kernel32.dll". (покапался в kernel32.dll данная точка входа имеется)
думается что я неправильно вызываю внутреннюю команду.
Прошу прощения за большой объем сообщения.
Ответить
|
Номер ответа: 2 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #2
|
Добавлено: 20.04.11 23:29
|
C#,FW 4.0
-
- using System;
- using System.Runtime.InteropServices;
- using System.Text;
-
- namespace ConsoleApplication1
- {
- class Program
- {
-
- [DllImport("kernel32.dll", SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX buffer);
-
- static void Main(string[] args)
- {
- var info = new MEMORYSTATUSEX();
- Console.WriteLine(GlobalMemoryStatusEx(info) ? info.ToString() : "Doesn't work :o( ");
- Console.ReadLine();
- }
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public class MEMORYSTATUSEX
- {
- public uint dwLength;
- public uint dwMemoryLoad;
- public ulong ullTotalPhys;
- public ulong ullAvailPhys;
- public ulong ullTotalPageFile;
- public ulong ullAvailPageFile;
- public ulong ullTotalVirtual;
- public ulong ullAvailVirtual;
- public ulong ullAvailExtendedVirtual;
-
- public MEMORYSTATUSEX()
- {
- dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
- }
-
- public override string ToString()
- {
- var builder = new StringBuilder();
- builder.AppendFormat("Mem loaded: {0}%.\r\n", dwMemoryLoad);
- builder.AppendFormat("Total phys mem: {0}.\r\n", ullTotalPhys);
- builder.AppendFormat("Available phys mem: {0}.\r\n", ullAvailPhys);
- builder.AppendFormat("Total page file: {0}.\r\n", ullTotalPageFile);
- builder.AppendFormat("Available page file: {0}.\r\n", ullAvailPageFile);
- builder.AppendFormat("Total virtual mem: {0}.\r\n", ullTotalVirtual);
- builder.AppendFormat("Available virtual mem: {0}.\r\n", ullAvailVirtual);
- builder.AppendFormat("Available extended virtual mem: {0}.\r\n", ullAvailExtendedVirtual);
- return builder.ToString();
- }
- }
- }
Mem loaded: 23%.
Total phys mem: 3487621120.
Available phys mem: 1631080448.
Total page file: 6973435904.
Available page file: 4538019840.
Total virtual mem: 2147352576.
Available virtual mem: 1969078272.
Available extended virtual mem: 0.
Ответить
|
Страница: 1 |
Поиск по форуму