API GlobalMemoryStatus
BlitzMax Forums/BlitzMax Programming/API GlobalMemoryStatus
| ||
I'am looking for use API Windows with Type. For exemple the GlobalMemoryStatus command must have a MEMORYSTATUS Structure to work. I try with an example I've found on the API Guide Software. But nothing :( Here's the code I test : 'Status de la mémoire **API Windows** Type MEMORYSTATUS Field dwLength:Long Field dwMemoryLoad:Long Field dwTotalPhys:Long Field dwAvailPhys:Long Field dwTotalPageFile:Long Field dwAvailPageFile:Long Field dwTotalVirtual:Long Field dwAvailVirtual:Long EndType Global GlobalMemoryStatus(lpBuffer:Byte Ptr) kernel32 = LoadLibraryA("kernel32.dll") If Kernel32 GlobalMemoryStatus = (GetProcAddress(kernel32,"GlobalMemoryStatus")) Else Notify("Impossible d'ouvrir la lib") EndIf Local Memoire:MEMORYSTATUS = New MEMORYSTATUS GlobalMemoryStatus(Memoire) Print Memoire.dwTotalPhys This, prints a value but not really the total physical memory... How API works with structure like this ? Here's the example I've Found on API Guide software (vb example) : Private Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS) Private Sub Form_Load() 'KPD-Team 1998 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@... Dim MemStat As MEMORYSTATUS 'retrieve the memory status GlobalMemoryStatus MemStat MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile memory." End Sub So, How can I code the GlobalMemoryStatus on Bmax using the API ? Thx in advance :) |
| ||
I'm assuming you can build modules, otherwise you just need to Import the memory.c file into your bmx code and delete the "Module Stu.Memory" line. memory.bmx memory.c |
| ||
yes but where do you find these c files ? If I want to retrieve disk volume the computer have is this the same thing ? a c file and so on ? is it possible to create a program in vb and import it to bmax like this ? Thx in advance. |
| ||
yes but where do you find these c files ? I provided the c file for you in the second codebox. Just copy and paste it into a new file and save it as memory.c and then import it into you bmax source. ' Example Import "memory.c" Print "Total Physical Memory: "+(TotalPhysicalMemory()/1024)+" Kb" Print "Available Physical Memory: "+(AvailPhysicalMemory()/1024)+" Kb" is it possible to create a program in vb and import it to bmax like this ? No BlitzMax cannot compile VB source, however it will compile imported C/C++ and Assembler source. |
| ||
Ok thx Is there a place we can find somme c files to import in ? Because I need to have some informtions like volume disk etc... |
| ||
Is there a place we can find somme c files to import in ? There are plenty of C/C++ source code websites where you can find bits and pieces, but you'll more than likely have to write the C/C++ source yourself if you want to do something specific. Because I need to have some informtions like volume disk etc... This should do it... diskvolume.c |
| ||
very complicated :( I don't know c langage...But it isn't possible to do that with bmax like I try to ? |
| ||
You need to replace the Longs with Ints, like so... |
| ||
:( ??? I tried this "replace long by int" byt it gave me wrong informations...And here it's work arf. I thing i made a mistakes...I tried, long, int....but in fact several mistakes lol Excellent thx a lot, I am going to try some API like this. I hope I could translate in bmax some API command like this. |
| ||
You have two problems: Your Function pointer needs to be declared "Win32" that will cause a crash with the stack. You need to set the length of the dwLength member of the MEMORYSTATUS Type This code is fixed and works Type MEMORYSTATUS Field dwLength:Int Field dwMemoryLoad:Int Field dwTotalPhys:Int Field dwAvailPhys:Int Field dwTotalPageFile:Int Field dwAvailPageFile:Int Field dwTotalVirtual:Int Field dwAvailVirtual:Int Method New() ' must set the legnth dwLength=SizeOf(MEMORYSTATUS) End Method EndType ' Must have "Win32" since windows API Global GlobalMemoryStatus(lpBuffer:Byte Ptr) "Win32" kernel32 = LoadLibraryA("kernel32.dll") If Kernel32 GlobalMemoryStatus = GetProcAddress(kernel32,"GlobalMemoryStatus") Else Notify("Impossible d'ouvrir la lib") EndIf Local Memoire:MEMORYSTATUS = New MEMORYSTATUS GlobalMemoryStatus(Memoire) Print "Total physical: "+(Memoire.dwTotalPhys/1024)+" Kb" Print "Available physical: "+(Memoire.dwAvailPhys/1024)+" Kb" Hope this helps. Make sure if its Windows API to add "Win32" and make sure you fully read the API documents as there is often a size of length field on the type that needs to be set correctly. Doug Stastny |
| ||
thx ;) |