[fpc-pascal]Win32 API Call
Jim Wilson
jawilson at ix.netcom.com
Tue Jun 22 18:43:27 CEST 2004
At 12:00 AM 6/22/2004, you wrote:
>You made a few mistakes translating GetCurrentHwProfile to Pascal:
Figures it was me... :-)
>1. parameter to GetCurrentHwProfile should be TProfileInfo, not
>PProfileInfo (using "var" parameter already forces passing HWProfile by
>reference)
That's awfully odd, because according to the Win32 API reference the
function GetCurrentHwProfile requires a pointer, which pProfileInfo is
(tProfileInfo is just the type definition). Guess I have some more reading
to do.
>2. result of GetCurrentHwProfile should be LongBool (4 bytes), not boolean
>(1 byte)
But in your code it's still a boolean, but it now works (it returns TRUE).
And, when I change "Results : longbool" in the var declaration I get "Hint:
Type size mismatch, possible loss of data / range check error" at the
"writeln ('Results: ',Results,' - ',GetLastError);" statement (and with
either declaration the function returns TRUE, so I assume it's working with
both). Does that mean longbool isn't really necessary?
Guess I have even more reading to do then I thought!
>3. most important, TProfileInfo.GUID and TProfileInfo.Name are not
>AnsiStrings. They are just char arrays, see attached code for correct
>declararions.
Another oddity, because the API reference says they're null-terminated
strings. So shouldn't an ansistring work for that too?
And where did you get those length numbers from, the ones you used for
those const definitions? I can't seem to find them anywhere, and it appears
that in order to get the info to display properly you need to assign
specific lengths to those char strings.
>4. This is not important for FPC 1.0.x, but for newer FPC remember to
>declare WinAPI functions as "stdcall" (FPC 1.0.x just used "stdcall" by
>default).
I'll make note of that.
>I'm attaching corrected version of your program.
Thanks for that -- you were a big help!
Regards,
Jim Wilson
More information about the fpc-pascal
mailing list