| /* |
| * This example demonstrates dynamical loading of (internal) Win32 DLLS. |
| */ |
| #include <stdio.h> |
| #include <windows.h> |
| |
| int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show) |
| { |
| SYSTEM_INFO si; |
| void (CALLBACK *fnGetSystemInfo)(LPSYSTEM_INFO si); |
| HMODULE kernel32; |
| |
| kernel32 = LoadLibrary("KERNEL32"); |
| if (kernel32<32) { |
| fprintf(stderr,"FATAL: could not load KERNEL32!\n"); |
| return 0; |
| } |
| fnGetSystemInfo = (void*)GetProcAddress(kernel32,"GetSystemInfo"); |
| if (!fnGetSystemInfo) { |
| fprintf(stderr,"FATAL: could not find GetSystemInfo!\n"); |
| return 0; |
| } |
| fnGetSystemInfo(&si); |
| fprintf(stderr,"QuerySystemInfo returns:\n"); |
| fprintf(stderr," wProcessorArchitecture: %d\n",si.u.s.wProcessorArchitecture); |
| fprintf(stderr," dwPageSize: %ld\n",si.dwPageSize); |
| fprintf(stderr," lpMinimumApplicationAddress: %p\n",si.lpMinimumApplicationAddress); |
| fprintf(stderr," lpMaximumApplicationAddress: %p\n",si.lpMaximumApplicationAddress); |
| fprintf(stderr," dwActiveProcessorMask: %ld\n",si.dwActiveProcessorMask); |
| fprintf(stderr," dwNumberOfProcessors: %ld\n",si.dwNumberOfProcessors); |
| fprintf(stderr," dwProcessorType: %ld\n",si.dwProcessorType); |
| fprintf(stderr," dwAllocationGranularity: %ld\n",si.dwAllocationGranularity); |
| fprintf(stderr," wProcessorLevel: %d\n",si.wProcessorLevel); |
| fprintf(stderr," wProcessorRevision: %d\n",si.wProcessorRevision); |
| return 0; |
| } |