Toon posts:

[Delphi] Int64 omzetten naar Integer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Weet iemand hoe je in Delphi een Int64, Large Integer, kunt omzetten naar een "gewoon" Integer type???????

Ik heb namelijk met de zgn. Performance Data Helper onder Win XP performance gegevens opgevraagd, maar ik krijg soms rare getallen, en ik denk dat dat ligt aan de Int64... :?

Ik heb de volgende code gebruikt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var PerfText:String;
    UsageValue:Integer; //Hier komt de Performance Counter Value in te staan...

//UsageString staat het "path" naar de counters zoals bijv. '\Processor(_Total)\% Idle Time'.

procedure GetUsage(UsageString:String);
var
  Query:HQUERY;
  Counter:HCOUNTER;
  CounterValue:TPdhFmtCounterValue;
  PathBuffer:array[0..MAX_PATH+1] of Char;
begin

StrCopy(PathBuffer,PChar(UsageString));

// Initialize a new query
PdhOpenQuery(nil, 0, Query);
try
 // Add the selected counter to the query
 PdhAddCounter(Query, PathBuffer, 0, Counter);
 
 // Tell PDH to collect the data
 PdhCollectQueryData(Query);
 
 // Get the countervalue in int64 format
 PdhGetFormattedCounterValue(Counter, PDH_FMT_LARGE, nil, CounterValue);
 
 // Display value
 case CounterValue.CStatus of
  PDH_CSTATUS_NEW_DATA: PerfText := 'New data: ' + IntToStr(CounterValue.LargeValue);
  PDH_CSTATUS_VALID_DATA: PerfText := 'Valid data: ' + IntToStr(CounterValue.LargeValue);
  else PerfText := 'Invalid data';
 end;
 UsageValue:=CounterValue.largeValue;
 finally
 // Always close the query when you're done with it. This will automatically
  // close counter handle as well.
  PdhCloseQuery(Query);
end;

end;

Verwijderd

IntToStr heeft gewoon een overloaded versie die met Int64 overweg kan, hoor.
Maar een Int64 kun je niet zondermeer overzetten naar een (signed 32 bits) integer. Dat past gewoonweg niet. :)

Ik heb geen beschikking over XP, dus met die rare waarden kan ik je niet helpen.

Verwijderd

Topicstarter
Bedankt voor de hulp :)

Maarre, ik heb al een andere oplossing gevonden, i.p.v. Integer gebruik ik nu Double... dit werkt ook, en preciezer... :)

Kan iemand me misschien vertellen hoe ik met de PDH van alle instances van een counter de "counterpath" kan verkrijgen????
Als ik bijv. mijn netwerk usage wil opvragen gebruik ik voor de variabele UsageString het volgende:
code:
1
UsageString:='\Network Interface(Realtek RTL8139 Family PCI Fast Ethernet NIC - Packet Scheduler Miniport)\Bytes Received/sec';

Ik krijg dan de usage van mijn netwerk adapter, maar dit verschilt natuurlijk op iedere pc, heeft iemand een idee hoe ik dit kan oplossen????????????????

Thanx :)