c++ - CPU USage Dll??
- "Tobi Mobile" <tobi klangwerk.de> Jun 05 2003
- "Walter" <walter digitalmars.com> Jun 05 2003
- "Tobi Mobile" <tobi klangwerk.de> Jun 05 2003
- "Walter" <walter digitalmars.com> Jun 05 2003
Hi there coders..
i am totally new to cpp and i am trying to make a dll that returns th
cpuusage,
what i have done is this :
----------------------------------------------------------------------------
----------------------------
// cpuusage.cpp (Windows NT/2000)
//
// Returns the CPU usage in percent on Windows NT/2000
//
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#define SystemBasicInformation 0
#define SystemPerformanceInformation 2
#define SystemTimeInformation 3
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 +
(double)((x).LowPart))
/* The exported functions */
extern "C"
{
__declspec(dllexport) UINT GetCPUusage();
}
typedef struct
{
DWORD dwUnknown1;
ULONG uKeMaximumIncrement;
ULONG uPageSize;
ULONG uMmNumberOfPhysicalPages;
ULONG uMmLowestPhysicalPage;
ULONG uMmHighestPhysicalPage;
ULONG uAllocationGranularity;
PVOID pLowestUserAddress;
PVOID pMmHighestUserAddress;
ULONG uKeActiveProcessors;
BYTE bKeNumberProcessors;
BYTE bUnknown2;
WORD wUnknown3;
} SYSTEM_BASIC_INFORMATION;
typedef struct
{
LARGE_INTEGER liIdleTime;
DWORD dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;
typedef struct
{
LARGE_INTEGER liKeBootTime;
LARGE_INTEGER liKeSystemTime;
LARGE_INTEGER liExpTimeZoneBias;
ULONG uCurrentTimeZoneId;
DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;
typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);
PROCNTQSI NtQuerySystemInformation;
UINT GetCPUusage() //dllMain() //
{
SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
SYSTEM_TIME_INFORMATION SysTimeInfo;
SYSTEM_BASIC_INFORMATION SysBaseInfo;
double dbIdleTime;
double dbSystemTime;
LONG status;
LARGE_INTEGER liOldIdleTime = {0,0};
LARGE_INTEGER liOldSystemTime = {0,0};
UINT x=0;
NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
GetModuleHandle("ntdll"), "NtQuerySystemInformation" );
if (!NtQuerySystemInformation)
return (0);
// get number of processors in the system
status = NtQuerySystemInformation(
SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL );
if (status != NO_ERROR)
return (0);
//printf("\nCPU Usage (press any key to exit): ");
while( x != 2 )
{
// get new system time
status = NtQuerySystemInformation(
SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0 );
if (status!=NO_ERROR)
return (0);
// get new CPU's idle time
status = NtQuerySystemInformation(
SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL );
if (status != NO_ERROR)
return (0);
// if it's a first call - skip it
if (liOldIdleTime.QuadPart != 0)
{
// CurrentValue = NewValue - OldValue
dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) -
Li2Double(liOldIdleTime);
dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) -
Li2Double(liOldSystemTime);
// CurrentCpuIdle = IdleTime / SystemTime
dbIdleTime = dbIdleTime / dbSystemTime;
// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) /
NumberOfProcessors
dbIdleTime = 100.0 - dbIdleTime * 100.0 /
(double)SysBaseInfo.bKeNumberProcessors + 0.5;
//printf("\b\b\b\b%3d%",(UINT)dbIdleTime);
//printf ("Usage : ",(UINT)dbIdleTime);
}
// store new CPU's idle and system time
liOldIdleTime = SysPerfInfo.liIdleTime;
liOldSystemTime = SysTimeInfo.liKeSystemTime;
x++;
}
return (UINT)dbIdleTime;
}
----------------------------------------------------------------------------
-------------------------
so please be so nice and help me out..
when i compile this script typing "dmc -mn -WD cpuusage2"
all seems to be right, than the optlink compiler starts and prints the
following:
----------------------------------------------------------------------------
-------------------------
C:\dm\bin>dmc -mn -WD cpuusage
link cpuusage,,,,cpuusage/noi;
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved
cpuusage.obj(cpuusage)
Error 42: Symbol Undefined _GetProcAddress 8
cpuusage.obj(cpuusage)
Error 42: Symbol Undefined _GetModuleHandleA 4
C:\dm\bin\..\lib\SNN.lib(isctype)
Error 42: Symbol Undefined _GetStringTypeA 20
C:\dm\bin\..\lib\SNN.lib(tolower)
Error 42: Symbol Undefined _LCMapStringA 24
C:\dm\bin\..\lib\SNN.lib(MBTOWC)
Error 42: Symbol Undefined _MultiByteToWideChar 24
C:\dm\bin\..\lib\SNN.lib(thsup)
Error 42: Symbol Undefined _GetCurrentThreadId 0
C:\dm\bin\..\lib\SNN.lib(semlock)
Error 42: Symbol Undefined _CreateSemaphoreA 16
C:\dm\bin\..\lib\SNN.lib(semlock)
Error 42: Symbol Undefined _ReleaseSemaphore 12
C:\dm\bin\..\lib\SNN.lib(semlock)
Error 42: Symbol Undefined _WaitForSingleObject 8
C:\dm\bin\..\lib\SNN.lib(except)
Error 42: Symbol Undefined _SetUnhandledExceptionFilter 4
C:\dm\bin\..\lib\SNN.lib(signal)
Error 42: Symbol Undefined _SetConsoleCtrlHandler 8
C:\dm\bin\..\lib\SNN.lib(ehsup)
Error 42: Symbol Undefined _RtlUnwind 16
C:\dm\bin\..\lib\SNN.lib(rtti)
Error 42: Symbol Undefined _RaiseException 16
C:\dm\bin\..\lib\SNN.lib(cinit)
Error 42: Symbol Undefined _GetEnvironmentStrings 0
C:\dm\bin\..\lib\SNN.lib(cinit)
Error 42: Symbol Undefined _GetVersion 0
C:\dm\bin\..\lib\SNN.lib(cinit)
Error 42: Symbol Undefined _FreeEnvironmentStringsA 4
C:\dm\bin\..\lib\SNN.lib(sbrk)
Error 42: Symbol Undefined _VirtualFree 12
C:\dm\bin\..\lib\SNN.lib(sbrk)
Error 42: Symbol Undefined _VirtualAlloc 16
C:\dm\bin\..\lib\SNN.lib(_exit)
Error 42: Symbol Undefined _ExitProcess 4
C:\dm\bin\..\lib\SNN.lib(setnterr)
Error 42: Symbol Undefined _GetLastError 0
C:\dm\bin\..\lib\SNN.lib(w32fater)
Error 42: Symbol Undefined _GetStdHandle 4
C:\dm\bin\..\lib\SNN.lib(w32fater)
Error 42: Symbol Undefined _WriteConsoleA 20
--- errorlevel 22
----------------------------------------------------------------------------
-------------------------
so.. any ideas on this??
what have i done wrong??
regards,
tobias wölki
-----------------------------------------------------
http://www.klangwerk.de
http://www.paraphonatic.de
http://www.tomcloud.de
mobile://+49.(0).172.5223442
ACHTUNG NEU :
Die Foren vom Klangwerk:
http://forum.klangwerk.de
http://www.hardcorebase.de
Einfach mal reinschauen und mitquatschen!!
EXTREM GEIL:
Besucht unseren neuen Shop..
http://www.equisto.de/klangwerk
-----------------------------------------------------
Jun 05 2003
You'll need a DllMain() for your dll. "Tobi Mobile" <tobi klangwerk.de> wrote in message news:bbn6uk$2m5q$1 digitaldaemon.com...Hi there coders.. i am totally new to cpp and i am trying to make a dll that returns th cpuusage, what i have done is this : --------------------------------------------------------------------------
---------------------------- // cpuusage.cpp (Windows NT/2000) // // Returns the CPU usage in percent on Windows NT/2000 // #include <windows.h> #include <conio.h> #include <stdio.h> #define SystemBasicInformation 0 #define SystemPerformanceInformation 2 #define SystemTimeInformation 3 #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart)) /* The exported functions */ extern "C" { __declspec(dllexport) UINT GetCPUusage(); } typedef struct { DWORD dwUnknown1; ULONG uKeMaximumIncrement; ULONG uPageSize; ULONG uMmNumberOfPhysicalPages; ULONG uMmLowestPhysicalPage; ULONG uMmHighestPhysicalPage; ULONG uAllocationGranularity; PVOID pLowestUserAddress; PVOID pMmHighestUserAddress; ULONG uKeActiveProcessors; BYTE bKeNumberProcessors; BYTE bUnknown2; WORD wUnknown3; } SYSTEM_BASIC_INFORMATION; typedef struct { LARGE_INTEGER liIdleTime; DWORD dwSpare[76]; } SYSTEM_PERFORMANCE_INFORMATION; typedef struct { LARGE_INTEGER liKeBootTime; LARGE_INTEGER liKeSystemTime; LARGE_INTEGER liExpTimeZoneBias; ULONG uCurrentTimeZoneId; DWORD dwReserved; } SYSTEM_TIME_INFORMATION; typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG); PROCNTQSI NtQuerySystemInformation; UINT GetCPUusage() //dllMain() // { SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; SYSTEM_TIME_INFORMATION SysTimeInfo; SYSTEM_BASIC_INFORMATION SysBaseInfo; double dbIdleTime; double dbSystemTime; LONG status; LARGE_INTEGER liOldIdleTime = {0,0}; LARGE_INTEGER liOldSystemTime = {0,0}; UINT x=0; NtQuerySystemInformation = (PROCNTQSI)GetProcAddress( GetModuleHandle("ntdll"), "NtQuerySystemInformation" ); if (!NtQuerySystemInformation) return (0); // get number of processors in the system status = NtQuerySystemInformation( SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL ); if (status != NO_ERROR) return (0); //printf("\nCPU Usage (press any key to exit): "); while( x != 2 ) { // get new system time status = NtQuerySystemInformation( SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0 ); if (status!=NO_ERROR) return (0); // get new CPU's idle time status = NtQuerySystemInformation( SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL ); if (status != NO_ERROR) return (0); // if it's a first call - skip it if (liOldIdleTime.QuadPart != 0) { // CurrentValue = NewValue - OldValue dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); // CurrentCpuIdle = IdleTime / SystemTime dbIdleTime = dbIdleTime / dbSystemTime; // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5; //printf("\b\b\b\b%3d%",(UINT)dbIdleTime); //printf ("Usage : ",(UINT)dbIdleTime); } // store new CPU's idle and system time liOldIdleTime = SysPerfInfo.liIdleTime; liOldSystemTime = SysTimeInfo.liKeSystemTime; x++; } return (UINT)dbIdleTime; } --------------------------------------------------------------------------
------------------------- so please be so nice and help me out.. when i compile this script typing "dmc -mn -WD cpuusage2" all seems to be right, than the optlink compiler starts and prints the following: --------------------------------------------------------------------------
------------------------- C:\dm\bin>dmc -mn -WD cpuusage link cpuusage,,,,cpuusage/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved cpuusage.obj(cpuusage) Error 42: Symbol Undefined _GetProcAddress 8 cpuusage.obj(cpuusage) Error 42: Symbol Undefined _GetModuleHandleA 4 C:\dm\bin\..\lib\SNN.lib(isctype) Error 42: Symbol Undefined _GetStringTypeA 20 C:\dm\bin\..\lib\SNN.lib(tolower) Error 42: Symbol Undefined _LCMapStringA 24 C:\dm\bin\..\lib\SNN.lib(MBTOWC) Error 42: Symbol Undefined _MultiByteToWideChar 24 C:\dm\bin\..\lib\SNN.lib(thsup) Error 42: Symbol Undefined _GetCurrentThreadId 0 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _CreateSemaphoreA 16 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _ReleaseSemaphore 12 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _WaitForSingleObject 8 C:\dm\bin\..\lib\SNN.lib(except) Error 42: Symbol Undefined _SetUnhandledExceptionFilter 4 C:\dm\bin\..\lib\SNN.lib(signal) Error 42: Symbol Undefined _SetConsoleCtrlHandler 8 C:\dm\bin\..\lib\SNN.lib(ehsup) Error 42: Symbol Undefined _RtlUnwind 16 C:\dm\bin\..\lib\SNN.lib(rtti) Error 42: Symbol Undefined _RaiseException 16 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _GetEnvironmentStrings 0 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _GetVersion 0 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _FreeEnvironmentStringsA 4 C:\dm\bin\..\lib\SNN.lib(sbrk) Error 42: Symbol Undefined _VirtualFree 12 C:\dm\bin\..\lib\SNN.lib(sbrk) Error 42: Symbol Undefined _VirtualAlloc 16 C:\dm\bin\..\lib\SNN.lib(_exit) Error 42: Symbol Undefined _ExitProcess 4 C:\dm\bin\..\lib\SNN.lib(setnterr) Error 42: Symbol Undefined _GetLastError 0 C:\dm\bin\..\lib\SNN.lib(w32fater) Error 42: Symbol Undefined _GetStdHandle 4 C:\dm\bin\..\lib\SNN.lib(w32fater) Error 42: Symbol Undefined _WriteConsoleA 20 --- errorlevel 22 --------------------------------------------------------------------------
------------------------- so.. any ideas on this?? what have i done wrong?? regards, tobias wölki ----------------------------------------------------- http://www.klangwerk.de http://www.paraphonatic.de http://www.tomcloud.de mobile://+49.(0).172.5223442 ACHTUNG NEU : Die Foren vom Klangwerk: http://forum.klangwerk.de http://www.hardcorebase.de Einfach mal reinschauen und mitquatschen!! EXTREM GEIL: Besucht unseren neuen Shop.. http://www.equisto.de/klangwerk -----------------------------------------------------
Jun 05 2003
Hi Walter, and thank you first for your reply, i have noticed that i need a DllMain(), bu i am not clear where to put it, and how the syntax is.. do i have the includes in the dllmain?? pleas show me where to put it that my script runs.. thanks in advance.. tobi;) "Walter" <walter digitalmars.com> schrieb im Newsbeitrag news:bbnu1d$b19$1 digitaldaemon.com...You'll need a DllMain() for your dll. "Tobi Mobile" <tobi klangwerk.de> wrote in message news:bbn6uk$2m5q$1 digitaldaemon.com...Hi there coders.. i am totally new to cpp and i am trying to make a dll that returns th cpuusage, what i have done is this :
-------------------------------------------------------------------------- ------------------------------ // cpuusage.cpp (Windows NT/2000) // // Returns the CPU usage in percent on Windows NT/2000 // #include <windows.h> #include <conio.h> #include <stdio.h> #define SystemBasicInformation 0 #define SystemPerformanceInformation 2 #define SystemTimeInformation 3 #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart)) /* The exported functions */ extern "C" { __declspec(dllexport) UINT GetCPUusage(); } typedef struct { DWORD dwUnknown1; ULONG uKeMaximumIncrement; ULONG uPageSize; ULONG uMmNumberOfPhysicalPages; ULONG uMmLowestPhysicalPage; ULONG uMmHighestPhysicalPage; ULONG uAllocationGranularity; PVOID pLowestUserAddress; PVOID pMmHighestUserAddress; ULONG uKeActiveProcessors; BYTE bKeNumberProcessors; BYTE bUnknown2; WORD wUnknown3; } SYSTEM_BASIC_INFORMATION; typedef struct { LARGE_INTEGER liIdleTime; DWORD dwSpare[76]; } SYSTEM_PERFORMANCE_INFORMATION; typedef struct { LARGE_INTEGER liKeBootTime; LARGE_INTEGER liKeSystemTime; LARGE_INTEGER liExpTimeZoneBias; ULONG uCurrentTimeZoneId; DWORD dwReserved; } SYSTEM_TIME_INFORMATION; typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG); PROCNTQSI NtQuerySystemInformation; UINT GetCPUusage() //dllMain() // { SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; SYSTEM_TIME_INFORMATION SysTimeInfo; SYSTEM_BASIC_INFORMATION SysBaseInfo; double dbIdleTime; double dbSystemTime; LONG status; LARGE_INTEGER liOldIdleTime = {0,0}; LARGE_INTEGER liOldSystemTime = {0,0}; UINT x=0; NtQuerySystemInformation = (PROCNTQSI)GetProcAddress( GetModuleHandle("ntdll"), "NtQuerySystemInformation" ); if (!NtQuerySystemInformation) return (0); // get number of processors in the system status = NtQuerySystemInformation( SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL ); if (status != NO_ERROR) return (0); //printf("\nCPU Usage (press any key to exit): "); while( x != 2 ) { // get new system time status = NtQuerySystemInformation( SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0 ); if (status!=NO_ERROR) return (0); // get new CPU's idle time status = NtQuerySystemInformation( SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL ); if (status != NO_ERROR) return (0); // if it's a first call - skip it if (liOldIdleTime.QuadPart != 0) { // CurrentValue = NewValue - OldValue dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); // CurrentCpuIdle = IdleTime / SystemTime dbIdleTime = dbIdleTime / dbSystemTime; // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5; //printf("\b\b\b\b%3d%",(UINT)dbIdleTime); //printf ("Usage : ",(UINT)dbIdleTime); } // store new CPU's idle and system time liOldIdleTime = SysPerfInfo.liIdleTime; liOldSystemTime = SysTimeInfo.liKeSystemTime; x++; } return (UINT)dbIdleTime; }
-------------------------------------------------------------------------- --------------------------- so please be so nice and help me out.. when i compile this script typing "dmc -mn -WD cpuusage2" all seems to be right, than the optlink compiler starts and prints the following:
-------------------------------------------------------------------------- --------------------------- C:\dm\bin>dmc -mn -WD cpuusage link cpuusage,,,,cpuusage/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved cpuusage.obj(cpuusage) Error 42: Symbol Undefined _GetProcAddress 8 cpuusage.obj(cpuusage) Error 42: Symbol Undefined _GetModuleHandleA 4 C:\dm\bin\..\lib\SNN.lib(isctype) Error 42: Symbol Undefined _GetStringTypeA 20 C:\dm\bin\..\lib\SNN.lib(tolower) Error 42: Symbol Undefined _LCMapStringA 24 C:\dm\bin\..\lib\SNN.lib(MBTOWC) Error 42: Symbol Undefined _MultiByteToWideChar 24 C:\dm\bin\..\lib\SNN.lib(thsup) Error 42: Symbol Undefined _GetCurrentThreadId 0 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _CreateSemaphoreA 16 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _ReleaseSemaphore 12 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _WaitForSingleObject 8 C:\dm\bin\..\lib\SNN.lib(except) Error 42: Symbol Undefined _SetUnhandledExceptionFilter 4 C:\dm\bin\..\lib\SNN.lib(signal) Error 42: Symbol Undefined _SetConsoleCtrlHandler 8 C:\dm\bin\..\lib\SNN.lib(ehsup) Error 42: Symbol Undefined _RtlUnwind 16 C:\dm\bin\..\lib\SNN.lib(rtti) Error 42: Symbol Undefined _RaiseException 16 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _GetEnvironmentStrings 0 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _GetVersion 0 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _FreeEnvironmentStringsA 4 C:\dm\bin\..\lib\SNN.lib(sbrk) Error 42: Symbol Undefined _VirtualFree 12 C:\dm\bin\..\lib\SNN.lib(sbrk) Error 42: Symbol Undefined _VirtualAlloc 16 C:\dm\bin\..\lib\SNN.lib(_exit) Error 42: Symbol Undefined _ExitProcess 4 C:\dm\bin\..\lib\SNN.lib(setnterr) Error 42: Symbol Undefined _GetLastError 0 C:\dm\bin\..\lib\SNN.lib(w32fater) Error 42: Symbol Undefined _GetStdHandle 4 C:\dm\bin\..\lib\SNN.lib(w32fater) Error 42: Symbol Undefined _WriteConsoleA 20 --- errorlevel 22
-------------------------------------------------------------------------- --------------------------- so.. any ideas on this?? what have i done wrong?? regards, tobias wölki ----------------------------------------------------- http://www.klangwerk.de http://www.paraphonatic.de http://www.tomcloud.de mobile://+49.(0).172.5223442 ACHTUNG NEU : Die Foren vom Klangwerk: http://forum.klangwerk.de http://www.hardcorebase.de Einfach mal reinschauen und mitquatschen!! EXTREM GEIL: Besucht unseren neuen Shop.. http://www.equisto.de/klangwerk -----------------------------------------------------
Jun 05 2003
I suggest getting the book "Advanced Windows" by Jeffrey Richter from www.digitalmars.com/bibliography.html It explains in detail how to set up DllMain(), what its arguments are, what the contraints are, setting up the .def file, etc. It's not something I can set out in a few lines. "Tobi Mobile" <tobi klangwerk.de> wrote in message news:bbpcog$1k7j$1 digitaldaemon.com...Hi Walter, and thank you first for your reply, i have noticed that i need a DllMain(), bu i am not clear where to put it, and how the syntax is.. do i have the includes in the dllmain?? pleas show me where to put it that my script runs.. thanks in advance.. tobi;) "Walter" <walter digitalmars.com> schrieb im Newsbeitrag news:bbnu1d$b19$1 digitaldaemon.com...You'll need a DllMain() for your dll. "Tobi Mobile" <tobi klangwerk.de> wrote in message news:bbn6uk$2m5q$1 digitaldaemon.com...Hi there coders.. i am totally new to cpp and i am trying to make a dll that returns th cpuusage, what i have done is this :
-------------------------------------------------------------------------------------------------------- // cpuusage.cpp (Windows NT/2000) // // Returns the CPU usage in percent on Windows NT/2000 // #include <windows.h> #include <conio.h> #include <stdio.h> #define SystemBasicInformation 0 #define SystemPerformanceInformation 2 #define SystemTimeInformation 3 #define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart)) /* The exported functions */ extern "C" { __declspec(dllexport) UINT GetCPUusage(); } typedef struct { DWORD dwUnknown1; ULONG uKeMaximumIncrement; ULONG uPageSize; ULONG uMmNumberOfPhysicalPages; ULONG uMmLowestPhysicalPage; ULONG uMmHighestPhysicalPage; ULONG uAllocationGranularity; PVOID pLowestUserAddress; PVOID pMmHighestUserAddress; ULONG uKeActiveProcessors; BYTE bKeNumberProcessors; BYTE bUnknown2; WORD wUnknown3; } SYSTEM_BASIC_INFORMATION; typedef struct { LARGE_INTEGER liIdleTime; DWORD dwSpare[76]; } SYSTEM_PERFORMANCE_INFORMATION; typedef struct { LARGE_INTEGER liKeBootTime; LARGE_INTEGER liKeSystemTime; LARGE_INTEGER liExpTimeZoneBias; ULONG uCurrentTimeZoneId; DWORD dwReserved; } SYSTEM_TIME_INFORMATION; typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG); PROCNTQSI NtQuerySystemInformation; UINT GetCPUusage() //dllMain() // { SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo; SYSTEM_TIME_INFORMATION SysTimeInfo; SYSTEM_BASIC_INFORMATION SysBaseInfo; double dbIdleTime; double dbSystemTime; LONG status; LARGE_INTEGER liOldIdleTime = {0,0}; LARGE_INTEGER liOldSystemTime = {0,0}; UINT x=0; NtQuerySystemInformation = (PROCNTQSI)GetProcAddress( GetModuleHandle("ntdll"), "NtQuerySystemInformation" ); if (!NtQuerySystemInformation) return (0); // get number of processors in the system status = NtQuerySystemInformation( SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL ); if (status != NO_ERROR) return (0); //printf("\nCPU Usage (press any key to exit): "); while( x != 2 ) { // get new system time status = NtQuerySystemInformation( SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0 ); if (status!=NO_ERROR) return (0); // get new CPU's idle time status = NtQuerySystemInformation( SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL ); if (status != NO_ERROR) return (0); // if it's a first call - skip it if (liOldIdleTime.QuadPart != 0) { // CurrentValue = NewValue - OldValue dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime); dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime); // CurrentCpuIdle = IdleTime / SystemTime dbIdleTime = dbIdleTime / dbSystemTime; // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors + 0.5; //printf("\b\b\b\b%3d%",(UINT)dbIdleTime); //printf ("Usage : ",(UINT)dbIdleTime); } // store new CPU's idle and system time liOldIdleTime = SysPerfInfo.liIdleTime; liOldSystemTime = SysTimeInfo.liKeSystemTime; x++; } return (UINT)dbIdleTime; }
----------------------------------------------------------------------------------------------------- so please be so nice and help me out.. when i compile this script typing "dmc -mn -WD cpuusage2" all seems to be right, than the optlink compiler starts and prints the following:
----------------------------------------------------------------------------------------------------- C:\dm\bin>dmc -mn -WD cpuusage link cpuusage,,,,cpuusage/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved cpuusage.obj(cpuusage) Error 42: Symbol Undefined _GetProcAddress 8 cpuusage.obj(cpuusage) Error 42: Symbol Undefined _GetModuleHandleA 4 C:\dm\bin\..\lib\SNN.lib(isctype) Error 42: Symbol Undefined _GetStringTypeA 20 C:\dm\bin\..\lib\SNN.lib(tolower) Error 42: Symbol Undefined _LCMapStringA 24 C:\dm\bin\..\lib\SNN.lib(MBTOWC) Error 42: Symbol Undefined _MultiByteToWideChar 24 C:\dm\bin\..\lib\SNN.lib(thsup) Error 42: Symbol Undefined _GetCurrentThreadId 0 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _CreateSemaphoreA 16 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _ReleaseSemaphore 12 C:\dm\bin\..\lib\SNN.lib(semlock) Error 42: Symbol Undefined _WaitForSingleObject 8 C:\dm\bin\..\lib\SNN.lib(except) Error 42: Symbol Undefined _SetUnhandledExceptionFilter 4 C:\dm\bin\..\lib\SNN.lib(signal) Error 42: Symbol Undefined _SetConsoleCtrlHandler 8 C:\dm\bin\..\lib\SNN.lib(ehsup) Error 42: Symbol Undefined _RtlUnwind 16 C:\dm\bin\..\lib\SNN.lib(rtti) Error 42: Symbol Undefined _RaiseException 16 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _GetEnvironmentStrings 0 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _GetVersion 0 C:\dm\bin\..\lib\SNN.lib(cinit) Error 42: Symbol Undefined _FreeEnvironmentStringsA 4 C:\dm\bin\..\lib\SNN.lib(sbrk) Error 42: Symbol Undefined _VirtualFree 12 C:\dm\bin\..\lib\SNN.lib(sbrk) Error 42: Symbol Undefined _VirtualAlloc 16 C:\dm\bin\..\lib\SNN.lib(_exit) Error 42: Symbol Undefined _ExitProcess 4 C:\dm\bin\..\lib\SNN.lib(setnterr) Error 42: Symbol Undefined _GetLastError 0 C:\dm\bin\..\lib\SNN.lib(w32fater) Error 42: Symbol Undefined _GetStdHandle 4 C:\dm\bin\..\lib\SNN.lib(w32fater) Error 42: Symbol Undefined _WriteConsoleA 20 --- errorlevel 22
----------------------------------------------------------------------------------------------------- so.. any ideas on this?? what have i done wrong?? regards, tobias wölki ----------------------------------------------------- http://www.klangwerk.de http://www.paraphonatic.de http://www.tomcloud.de mobile://+49.(0).172.5223442 ACHTUNG NEU : Die Foren vom Klangwerk: http://forum.klangwerk.de http://www.hardcorebase.de Einfach mal reinschauen und mitquatschen!! EXTREM GEIL: Besucht unseren neuen Shop.. http://www.equisto.de/klangwerk -----------------------------------------------------
Jun 05 2003








"Walter" <walter digitalmars.com>