New Win32 Core api broke?
Mike Parker via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jan 25 21:05:43 PST 2016
On Monday, 25 January 2016 at 22:57:22 UTC, Igor wrote:
> error LNK2019: unresolved external symbol GetStockObject
> referenced in function _D2Application10createWindowMFPFZvZi
> (int Application.createWindow(void function()*))
>
> and the line of code is
>
> wc.hbrBackground = GetStockObject(WHITE_BRUSH);
>
> I've tried to
>
> import core.sys.windows.wingdi;
>
> But that just got me to this error. When I don't use it, the
> code compiles
>
> I was able to solve this problem by importing gdi32.lib on the
> command line. Shouldn't the module import the lib like it does
> for the other ones? or does it?
For clarity, libraries are not imported, they are linked.
*Modules* are imported. Imports are processed at compile time to
determine which symbols are available for use in the current
compilation units. Libraries and object files are processed by
the linker after compilation and imports have no role to play in
that. Unresolved external symbol errors are linker errors,
meaning you used a symbol in your code, the linker looked for its
copied form in all the available object files (including any
libraries it was given) and couldn't find it.
The Windows API is implemented in multiple libraries. I believe
DMD links to kernel32.lib and user32.lib by default, as those
contain the most commonly used functions, but if you want to call
any functions from any of the other Win32 libraries, you will
need to link with them manually either by passing them on the
command line or by using a lib pragma. If you aren't sure which
library needs linking with when you get a missing symbol, the
thing to do is to look up the function in the MSDN (Microsoft
Developer Network) documentation and it will tell you which
library you need. Usually it's enough to feed the function to
Google and you will get the MSDN page in one of the first few
links (though you'll need to make sure to go to the Win32 API
page and not the documentation for the .NET version of the
function).
More information about the Digitalmars-d-learn
mailing list