Hallo!
Ik heb mbv. Delphi 6 een .dll file gemaakt met een enkele (export) functie daarin. Als ik deze functie aanroep vanuit een (Delphi) programma, krijg ik de juiste gegevens in het "Usage" record.
Daarnaast heb ik een programma geschreven in Win32 API met een eigen WindowProc etc. Met dit programma (dat de units Messages en Windows gebruikt) kan ik de gegevens van het record ineens niet meer goed lezen
Kan iemand mij misschien met dit probleem helpen ????
Alvast hartelijk bedankt!!!
Gedeelte code van de DLL (DMain.dll):
Gedeelte code van de Win32 application:
Ik heb mbv. Delphi 6 een .dll file gemaakt met een enkele (export) functie daarin. Als ik deze functie aanroep vanuit een (Delphi) programma, krijg ik de juiste gegevens in het "Usage" record.
Daarnaast heb ik een programma geschreven in Win32 API met een eigen WindowProc etc. Met dit programma (dat de units Messages en Windows gebruikt) kan ik de gegevens van het record ineens niet meer goed lezen
Kan iemand mij misschien met dit probleem helpen ????
Alvast hartelijk bedankt!!!
Gedeelte code van de DLL (DMain.dll):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| type TUsage = record Index: integer; CPU: double; CPUHistory: array [1..100] of double; end; type PUsage = ^TUsage; function GetCPUUsage (Usage: PUsage; MNCPU: Boolean): Boolean; export; begin with PUsage do //Invullen van het Usage record met gegevens Index := Index + 1; if Index > 100 then Index := 1; CPU := //CPU gebruik... CPUHistory [Index] := CPU; end; Result := True; end; exports GetCPUUsage; |
Gedeelte code van de Win32 application:
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
| type
TGetCPUUsage = function (Usage: PUsage; MNCPU: Boolean): Boolean;
var
GetCPUUSage: TGetCPUUSage;
Usage: TUsage;
HLib: THandle;
procedure LaadDll;
begin
if HLib = 0 then
begin
HLib := LoadLibrary ('DMain');
if HLib <> 0 then
begin
@GetCPUUsage := GetProcAddress (HLib, 'GetCPUUsage');
if @GetCPUUsage = nil then MessageBox (0, 'Function GetCPUUsage not available in DMain.dll.', 'Error', MB_OK);
end
else
begin
MessageBox (0, 'DMain.dll not available.', 'Error', MB_OK);
end;
end;
end;
procedure BeeindigDll;
begin
FreeLibrary (HLib);
HLib := 0;
@GetCPUUsage := nil;
end;
procedure BepaalHetCPUGebruik;
begin
if GetCPUUsage <> nil then GetCPUUsage (@Usage, True);
end; |