Am 13.06.2011 23:18, schrieb Loopback:
Hi!

Let me begin by saying, I'm sorry if this is caused of some obvious
error but since I am new to D, I am not aware of all the tricks and
treats it offers.

I am working with the WindowsAPI binding at dsource.org (though I do not
believe this is related to the binding itself). However, in my code I
call the function LOWORD (win32 specific). This function is defined in
the win32.windef module. Although it is defined there (without any
encapsulations in version statements or anything similar) I receive this
error:

Error 42: Symbol Undefined _D5win326windef6LOWORDFkZt (LOWORD undefined)

To solve this I had to copy-paste the exact function directly into my
own file/module instead. So my question is the following; why do I have
to copy and paste the function directly in my code when it is clearly
defined in one of the files I import?

Windef.d attached

Your error is an linker error. This means the last step of creating an exceutable couldn't be taken: finding all names you promised to be there. When you, import a module, you promise: "Compiler, I know that definitions I'm using in this module aren't declared in there, but look at this module. I promise that all these functions in there will be there during the linking process". The compiler gives no error because you promised, but now the linker has problem: It hasn't got the defintions you said to be there. You have to say the linker where to find them.
One way is to give your .d/.lib file to dmd so he can give it to the linker:
dmd main.d path/to/windef.d

Mafi

Reply via email to