Når jeg prøver at kalde en funktion i Kernel32.dll så kommer der bare en fejl! Hvad gør jeg galt?
Function GetSystemTime:string; stdcall; External'kernel32.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.caption:=GetSystemTime
end;
Programmet bliver kompileret korrekt, men når jeg trykker på min knap, så kommer der en fejl med:
Prpject Project1.exe raised execption class EAccessViolation with message 'Access violation at address 003B0011. Read of address 00000000'. Process stopped. Use Step or Run to continue.
Hej,
Du får en fejl da den måde du har defineret GetSystemTime på IKKE er korrekt.
For det første er det ikke en funktion men en procedure og for det andet så er der ingen funktioner/procedure i windows dll'erne som bruger
string variabler men der i mod bruges der
PChar. Den tager der i mod en reference til en SYSTEMTIME struktur.
SYSTEMTIME burde være defineret i windows unit'en men eller skulle den gerne se således ud:
type
TSYSTEMTIME = packed record
wYear : Word;
wMonth : Word;
wDayOfWeek : Word;
wDay : Word;
wHour : Word;
wMinute : Word;
wSecond : Word;
wMilliseconds : Word;
end;
procedure GetSystemTime(var lpSystemTime : TSYSTEMTIME); stdcall; external 'kernel32.dll';
Du skal dog huske selv at konvertere de forskellige værdier i TSYSTEMTIME til en streng hvis den skal bruges i dit eks. oven for.
/Michael.