c - Få gratis RAM i Windows Programmatisk?

Indlæg af Hanne Mølgaard Plasc

Problem



Alle,
      Har brug for hjælp her. Jeg er fra en ren Java-baggrund og ved ikke meget om C-programmering. I grund og grund er jeg nødt til at skrive et C-program (og oprette en eksekverbar), som ville udgive antallet af gratis bytes (RAM) på en Windows-maskine (XP/2008/7)


Jeg har lavet nogle undersøgelser om det og fandt ud af, at der er en funktion kaldet GlobalMemoryStatusEx og også et link på dette:
http://msdn.microsoft.com/en-us/library/aa366589(v=vs.85).aspx[4]


Jeg har installeret cygwin med gcc, og det ovennævnte program kompilerer mig ikke selv. Jeg ved, jeg gør noget dumt her ..


$ 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)


Enhver hjælp er meget værdsat!

Bedste reference


Cygwin emulerer som standard en Unix API på Windows, snarere end at præsentere Windows API.


Du kan få mere succes med MinGW-pakken, som er GCC til Windows + Windows API. [5]

Andre referencer 1


Som larsmans sagde, er cygwin ikke en Windows native compiler. Ud over MinGW kan du også overveje Visual C ++ 2010 Express. [6]

Andre referencer 2


Hvis du ikke er bekendt med C, og alt du vil gøre er at skrive dette lille program til Windows, kan du finde det lettere at komme i gang med den gratis Visual C ++ Express. Chancerne er, at MSDN-eksempler vil træne ud af boksen. [7]


Rediger : Du nævner Java, men det er ikke helt klart, om det eneste formål med denne C app skal påberåbes fra Java. I det tilfælde syntes jeg at jeg skulle nævne noget, der hedder JNative. Det ser ud til at være et rent Java-bibliotek, der bl.a. indeholder en wrapper til GlobalMemoryStatusEx. Bemærk at jeg fandt JNative via en Google-søgning og haven ikke brugt det mig selv. [8] [9]

Andre referencer 3


Den funktion, som du henviser til, er en Windows API-funktion, hvilket betyder, at du ikke kan kalde den funktion fra cygwin, hvilket er et POSIX-emuleringslag oven på Windows.


Du har et par muligheder på dette tidspunkt:



  1. Du kan downloade og installere Windows SDK, som indeholder gratis Visual Studio C/C ++ compiler (erne).

  2. Du kan downloade en kopi af Visual C ++ Express Edition gratis.

  3. Hvis du er studerende, kan du få en fuld kopi af Visual Studio 2010 fra MSDNAA (leveres af dit universitet) eller fra DreamSpark.

  4. Du kunne købe en fuld kopi af Visual Studio.

  5. Du kan downloade og installere MinGW, som er GCC-kompilatorer, der er sendt til Windows.



Bemærk, at alle Microsoft-kompilatorer understøtter hele Win32 API. MinGW er begrænset i sin håndtering af Unicode på Windows, det understøtter ikke COM (så hvis du vil kalde COM API'er det er en smerte), og det inkluderer ikke alle de overskrifter, der følger med Windows SDK. [10] [11] [12] [13]


GCC er en stor kompilator, det er bare ikke så stort med hensyn til dets Windows-support.

Andre referencer 4


De viste svar er korrekte, men jeg føler ikke, at de forklarer problemet korrekt.


Unix og Unix-lignende operativsystemer stræber efter at overholde en standard API kaldet POSIX. Windpws er ikke i overensstemmelse med POSIX. Cygwin blev skrevet som en måde at give POSIX compliance på Windows. Når du kompilerer på Cygwin, compilerer du således på et POSIX API, ikke et Windows API. Funktionen du fandt på MSDN findes ikke i POSIX. Først får du kompilere fejl.


MinGW er gcc portet til Windows. Det er opmærksom på Windows API 's med den korrekte indeholder. Visual Studio' s nmake er det samme i denne henseende (giver adgang til Win API).

Andre referencer 5


For at bruge cygwin gcc til at kompilere programmer ved hjælp af Win32 API, vil du have pakken mingw-i686-headers (som indeholder headerfiler som tchar.h).


Derefter skal du muligvis også definere nogle makroer for at aktivere nyere API'er. [14]