Avatar billede sessa Nybegynder
09. september 2006 - 19:43 Der er 8 kommentarer og
1 løsning

Fejl ved brug af GetSystemInfo

Når jeg forsøger at kalde funktionen GetSystemInfo, sådan her,

LPSYSTEM_INFO sysinf;
GetSystemInfo( sysinf );

får jeg denne fejlmeddelelse:

Access violation at address 77E7B84C in module 'kernel32.dll'. Write of address 0000000D

Jeg bruger Borland C++Builder 5.0 og min Windows-udgave er XP Home Edition. Nogen der kan hjælpe?
Avatar billede bertelbrander Novice
09. september 2006 - 20:14 #1
LPSYSTEM_INFO er en pointer, du skal oprette et object, som ikke er en pointer:

SYSTEM_INFO sysinf;

Og kalde GetSystemInfo med adressen på sysinf;
GetSystemInfor(&sysInf);

LP foran en variabel i Win32 API betyder (long) pointer.
Avatar billede sessa Nybegynder
09. september 2006 - 21:52 #2
Men i Win32.hlp står der:
-------------------------------------------------------------------------
The GetSystemInfo function returns information about the current system.

VOID GetSystemInfo(

    LPSYSTEM_INFO lpSystemInfo     // address of system information structure 
  );   
--------------------------------------------------------------------------
...men jeg har osse prøvet med det du foreslår, og resultatet er det samme.
Avatar billede sessa Nybegynder
09. september 2006 - 22:03 #3
Nej, du har ret! Det jeg forsøgte med, var

SYSTEM_INFO* sysinf;
GetSystemInfo( sysinf );

...og det er åbenbart ikke det samme som

SYSTEM_INFO sysinf;
GetSystemInfo( &sysinf );

Lidt pinligt, men nu virker det i hvert fald. Mange tak for hjælpen. Så vidt jeg husker, samler du ikke på point, ellers ville jeg bede dig om at lægge et svar. Husker jeg rigtigt?
Avatar billede bertelbrander Novice
09. september 2006 - 22:07 #4
SYSTEM_INFO*  er det samme som LPSYSTEM_INFO så det løser ikke problemet.

Du husker rigtigt, jeg samler ikke på point.
Avatar billede sessa Nybegynder
10. september 2006 - 09:02 #5
Jeg snupper pointene selv. Jeg synes nu stadig, at det er underligt, at der står
LPSYSTEM_INFO lpSystemInfo
i hjælpefilen, når det ikke er rigtigt, men sådan er der så meget...
Endnu en gang tak.
Avatar billede nlf Nybegynder
10. september 2006 - 10:17 #6
Jamen det er jo rigtigt, for du skal bare vide, hvad det betyder.
Alt, hvad der står LP (Long Pointer) foran, kræver et reelt objekt at arbejde med, da de blot er pointers.
Du er jo nødt til at undersøge tingene, før du kan sige, de er forkerte ;)
Avatar billede sessa Nybegynder
10. september 2006 - 11:56 #7
OK, men det er nu nærliggende at tro, at når der står

LPSYSTEM_INFO lpSystemInfo

...så er det en long pointer til et SYSTEM_INFO, funktionen skal bruge. Nå, det er langt fra første gang, jeg har rodet rundt i det der med pointere - og det bliver nok heller ikke sidste. Suk...:)
Avatar billede tokelil Nybegynder
10. september 2006 - 12:21 #8
Igen, det er også en long pointer til SYSTEM_INFO den skal bruge! Men du skal selvfølgelig allokere SYSTEM_INFO strukturen, før du kan bruge den. F.eks.:

LPSYSTEM_INFO sysinf = new SYSTEM_INFO;
GetSystemInfo( sysinf );
Avatar billede sessa Nybegynder
10. september 2006 - 14:03 #9
Nå ja! Det er selvfølgelig rigtigt. Nu tror jeg, at jeg har styr på det - tak til jer alle tre :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester