On Sat, 4 Oct 2014, Jürgen Hestermann wrote:

In my programs I use this code quite often:

SysErrorMessage(GetLastError);

A closer look at SysErrorMessage shows that the ERRORCODE will
not be used in this routine but only handed over to
FormatMessageA which expects a DWORD!

-----------------------------------------------------------
function FormatMessageA(dwFlags:DWORD;
                       lpSource:LPCVOID;
                       dwMessageId:DWORD;            <----- 3rd Parameter
                       dwLanguageId:DWORD;
                       lpBuffer:LPSTR;
                       nSize:DWORD;
Arguments:va_list):DWORD; external 'kernel32' name 'FormatMessageA';
-----------------------------------------------------------

So if GetLastError gives a DWORD and FormatMessageA expects a DWORD
shouldn't SysErrorMessage use a DWORD too?

Not necessarily, because it is a cross-platform function and on other systems 
the error codes are not necessarily positive values.
Unfortunately, this kind of windows-api-creep is found throughout the RTL.

The proper procedure is probably to introduce TSysErrorCode which depends on 
the platform, and replace integer/dword with that.
Please file a bug-report, so we do not forget this.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to