|  | /* | 
|  | * This example demonstrates dynamical loading of (internal) Win32 DLLS. | 
|  | */ | 
|  | #include <stdio.h> | 
|  | #include <windows.h> | 
|  |  | 
|  | int PASCAL WinMain (HINSTANCE inst, HINSTANCE 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; | 
|  | } |