Undefined (Win32) Externals

Jonathan M Davis jmdavisProg at gmx.com
Sun Jun 12 16:16:37 PDT 2011


On 2011-06-12 15:39, Loopback wrote:
> Hi!
> 
> Let me begin by saying, that I haven't used Usenet newsgroup at all, so
> please excuse me for any errors or misunderstandings of the guidelines.
> 
> I recently begun programming a win32 application though I instantly got
> stuck with a problem. As you might know, win32 applications require that
> you define the WindowProc function for processing window messages.
> 
> I've used a object-oriented approach for this, and that requires that
> you declare the WindowProc function as static, and bind your own class
> (hWnd) to GWL_USERDATA, to be able to call your own, class defined,
> message handler (WindowProc). To do this, you have to access the two
> functions GetWindowLong and SetWindowLong.
> 
> For some reason, these functions do not exist in the windows module
> (std.c.windows.windows), neither does the GWL_USERDATA constant.
> 
> To solve this I've used this alternative code:
> 
> extern (Windows)
> {
> 	int GWL_USERDATA;
> 	LONG SetWindowLong(HWND, int, LONG);
> 	LONG GetWindowLong(HWND, int);
> }
> 
> When I then try to compile this application, the GWL_USERDATA constant
> compiles without any errors, but the Get-/SetWindowLong produces linker
> errors.
> 
> To solve the linker errors, I checked which library they were contained
> in, on MSDN it said User32.lib. Therefore I linked to this library -
> without any success.
> 
> So to summarize, how do I solve these linker errors:
> 
> Error 42: Symbol Undefined _SetWindowLong at 12
> Error 42: Symbol Undefined _GetWindowLong at 8
> 
> Sorry for such a long message!
> Any help is greatly appreciated!

I believe that you need extern(C) around those functions. They're C functions, 
not D functions.

- Jonathan M Davis


More information about the Digitalmars-d mailing list