DLL's and D

H. S. Teoh hsteoh at quickfur.ath.cx
Thu Mar 15 15:09:59 PDT 2012


On Thu, Mar 15, 2012 at 09:16:45PM +0100, Chris Pons wrote:
> Ok, I've actually run into another problem. I've decided to use a
> static library, since my project is small. I have added the path to
> the static library's .lib file in my project properties, just like
> with derelict2. However, I'm not sure how to use import properly.

The import statement *always* works with D files. Well, technically, you
can use a .di file generated by the compiler for your library, but it's
basically a reduced form of the library D code. But in either case, you
need to import the library D (or Di) file, not the .lib file.

The compiler itself doesn't even care about .lib files until it has
finished compilation and moved on to the linking stage.


> The library in question is in location (relative to my project)
> Libraries/Math/math.lib.
> 
> If a module in math.lib is matrix, i've tried import declarations
> like:
> 
> import Libraries.Math.math.matrix; //probably very wrong

It's correct, albeit a bit ugly. To alleviate the ugliness, you can tell
the compiler where the "root" directory for the library is supposed to
be. For example, if you invoked dmd with -ILibraries/Math, then you'll
be able to say:

	import math.matrix;

and the compiler will know to look for Libraries/Math/math/matrix.d.


[...]
> This just lead me to believe that import matrix or import math.matrix
> should work.

Correct. Provided you specify the right -I option to the compiler.


> Am I wrong in assuming that the library contains the D code I need to
> use? So I would not be trying to import the .d file I used to
> construct the static library?
[...]

The .lib file contains the *compiled* form of the library, which is no
longer D code but machine code. So it can't be used with import. The
import statement needs either the original library .d file, or the
reduced .di generated by the compiler's -H option.

Hope this helps.


T

-- 
ASCII stupid question, getty stupid ANSI.


More information about the Digitalmars-d-learn mailing list