On Sun, 5 Oct 2014, Jürgen Hestermann wrote:


Am 2014-10-05 um 12:10 schrieb Michael Van Canneyt:
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.

But the current situation is wrong for *all* plattforms because the sequence DWORD-INTEGER-DWORD does not work and when it becomes INTEGER-INTEGER-DWORD it doesn't work either. The FormatMessageA call within SysErrorMessage expects DWORD too but an INTEGER is provided.

A typecast will be needed somewhere.


If GetLastError sometimes gives back a DWORD (Windows) and sometimes an INTEGER (Linux) then the complete sequence GetLastError-SysErrorMessage-FormatMessageA needs to become platform dependend to solve this. But as long as this is not the case at least one platform (Windows) would work okay when the parameter in SysErrorMessage becomes DWORD too. In the current situation
it *never* works correctly (not even for Linux).

That is why we need an opaque type which will probably be used in more than one 
call.
It needs to be investigated, hence the bugreport is needed.

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

Reply via email to