On 21/06/15 22:20, patspiper wrote: > On 21/06/15 23:08, Jonas Maebe wrote: >> On 21/06/15 21:43, patspiper wrote: >>> Changing the GetTickCount declaration to any of the following works: >>> Function GetTickCount: DWORD; external name >>> '_$dll$kernel32$GetTickCount'; >>> Function GetTickCount: DWORD; external 'kernel32'; >>> >>> Why is the behaviour different between Linux and Windows? >> ELF (used by Linux) and PECOFF (used by Windows) use completely >> different ways of shared linking. > So what should be done to remedy the Windows case when $LINKLIB is used, > that is unless $LINKLIB is not to be used with Windows?
{$linklib xxx} can be useful on Windows if you have a DLL that has an initialisation routine that you want to be run, but you're not calling any code from it. > Note that in the 2 'solutions' I gave, $LINKLIB is not needed and can be > removed altogether. That's correct. And the second way is the normal way to import routines from a DLL under Windows (which also works under *nix; only Darwin is different for legacy reasons: there you need the {$linklib xxx} to ensure that the library is linked). Using both {$linklib xxx} and "external 'xxx'" is best, since it will always work on all platforms. Jonas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal