Получение свободной оперативной памяти в Windows программно? - PullRequest
0 голосов
/ 17 февраля 2011

Все, Нужна помощь здесь. Я из чисто Java-опыта и мало знаю о программировании на Си. По сути, мне нужно написать программу на C (и создать исполняемый файл), который выводил бы количество свободных байтов (RAM) на компьютере с Windows (XP / 2008/7)

Я провел некоторое исследование по этому поводу и обнаружил, что есть функция GlobalMemoryStatusEx, а также ссылка на это: http://msdn.microsoft.com/en-us/library/aa366589(v=vs.85).aspx

Я установил cygwin с gcc, и вышеупомянутая программа даже не компилируется для меня. Я знаю, что я делаю что-то глупое здесь ..

$ gcc hello.c -o hello.exe
hello.c:3:19: error: tchar.h: No such file or directory
hello.c: In function `main':
hello.c:7: error: `MEMORYSTATUSEX' undeclared (first use in this function)
hello.c:7: error: (Each undeclared identifier is reported only once
hello.c:7: error: for each function it appears in.)
hello.c:7: error: expected `;' before `statex'
hello.c:9: error: `statex' undeclared (first use in this function)

Любая помощь очень ценится!

Ответы [ 6 ]

5 голосов
/ 17 февраля 2011

Как сказал larsmans, cygwin не является встроенным компилятором Windows.В дополнение к MinGW, вы также можете рассмотреть Visual C ++ 2010 Express .

3 голосов
/ 17 февраля 2011

Если вы не знакомы с C и все, что вам нужно, это написать эту небольшую программу для Windows, вам может быть легче начать работу с бесплатной Visual C ++ Express .Скорее всего, примеры MSDN будут работать из коробки.

Редактировать : Вы упомянули Java, но не совсем ясно, должна ли единственная цель этого приложения C вызываться из Java,В таком случае я подумал, что упомяну что-то под названием JNative .Кажется, что это чистая библиотека Java, которая содержит, помимо прочего, оболочку для GlobalMemoryStatusEx .Обратите внимание, что я нашел JNative через поиск в Google и сам не использовал его.

3 голосов
/ 17 февраля 2011

Cygwin по умолчанию эмулирует API-интерфейс Unix в Windows вместо представления Windows API.

Возможно, вы добьетесь большего успеха с пакетом MinGW , который представляет собой GCC для Windows + Windows API.

2 голосов
/ 17 февраля 2011

Функция, на которую вы ссылаетесь, является функцией Windows API, что означает, что вы не можете вызывать эту функцию из cygwin, который является эмуляционным слоем POSIX поверх Windows.

На данный момент у вас есть несколько вариантов:

  1. Вы можете бесплатно загрузить и установить Windows SDK , который включает компилятор (ы) Visual Studio C / C ++.
  2. Вы можете бесплатно загрузить копию Visual C ++ Express Edition .
  3. Если вы студент, вы можете получить полную копию Visual Studio 2010 от MSDNAA (предоставляется вашим университетом) или от DreamSpark .
  4. Вы можете приобрести полную копию Visual Studio.
  5. Вы можете загрузить и установить MinGW , который является компилятором GCC, портированным на Windows.

Обратите внимание, что все компиляторы Microsoft поддерживают весь API Win32. MinGW ограничен в обработке Unicode в Windows, он не поддерживает COM (поэтому, если вы хотите вызывать COM API, это неудобно), и он не включает все заголовки, включенные в Windows SDK.

GCC - отличный компилятор, он просто не так хорош с точки зрения поддержки Windows.

1 голос
/ 17 февраля 2011

Чтобы использовать cygwin gcc для компиляции программ с использованием Win32 API, вам потребуется пакет mingw-i686-headers (который включает в себя заголовочные файлы, такие как tchar.h).

Тогда вам также может понадобиться определить некоторые макросы для включения более новых API .

1 голос
/ 17 февраля 2011

Представленные ответы верны, но я не думаю, что они объясняют проблему должным образом.

Unix и Unix-подобные операционные системы стремятся соответствовать стандартному API под названием POSIX.Windpws не соответствует POSIX.Cygwin был написан как способ обеспечения соответствия POSIX в Windows.Таким образом, когда вы компилируете в Cygwin, вы компилируете API POSIX, а не Windows API.Функция, которую вы нашли в MSDN, не существует в POSIX.В-третьих, вы получаете ошибки компиляции.

MinGW перенесен в Windows.Он знает о Windows API с соответствующими включениями.В этом отношении Visual Studio nmake одинаков (предоставляет доступ к Win API).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...