Using .lib and .dll in D applications

moe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jun 19 11:33:36 PDT 2016


On Sunday, 19 June 2016 at 18:00:07 UTC, Mike Parker wrote:
> On Sunday, 19 June 2016 at 17:33:43 UTC, moe wrote:
>
>
>
>
>
>
>
>> Unfortunatelly I still don't get it. I would like to have an 
>> independant project "dbar". The created lib is then used in 
>> another project "dfoo". Assuming that "dfoo" has no access to 
>> "dbar" other than the .lib file.
>
> You can't do it with only the lib file. You *need* the source 
> file too for the import statement. As I explained, the lib file 
> is used by the linker, not the compiler. The compiler needs the 
> source file.
>
>>
>> My folder structure is like this:
>>
>> -dtest
>> --dbar
>> ----source\barlib.d
>> ----dub.json
>> This project creates a dbar.lib file which seams to work.
>>
>>
>> -dtest
>> --dfoo
>> ----lib\dbar.d  // copied from the dbar project
>> ----source\app.d
>> ----dub.json
>
> You don't need to copy dbar to the lib directory in this case.
>
>> This project would use the dbar.lib but should otherwise not 
>> have access to the dbar project. Basically simulating, that 
>> someone else made a dbar project to which I would not have 
>> access other than using the dbar.lib. How do I have to 
>> configure the dub.json file for this to work?
>
> One of two things would happen:
>
> 1) They would register the project with he dub registry, then 
> you add a dependency to a specific version the library. Dub 
> would then download the necessary files for you and ensure that 
> everything you need is passed to the compiler when building 
> your project.
>
> 2) They would provide some other means for you to get the 
> source and the library. Then you would need to manually 
> configure your dub.json to pass the import path to the compiler 
> and link with the library.
>
>>
>> I have tried a variety of configurations for the dub.json. At 
>> this point it feels like a bad guessing game. That is no way 
>> to deveop anything. I need to figure out how to properly setup 
>> the dub.json but I don't seam to find the answer online. 
>> "http://code.dlang.org/package-format?lang=json" isn't very 
>> helpful.
>
> All the information you need is there on that page.
>
>>
>> I have meanwhile adjusted my dtest/dfoo/dub.json to this:
>
>> 	"dependencies": {
>> 		"dbar": "~master"
>> 	}
>
>> This gives me the error: "Root package dfoo references unknown 
>> package dear"
>
> As I explained above, you need a path attribute for the 
> dependency in this case since it is on your local file system 
> and not in the registry. The documentation link I gave you 
> explains how to to this. Try this:
>
> "dependencies": {
>     "dbar":  {"path": "../dbar"}
> }

I see where I went wrong. I thought that it's possible to only 
use the .lib file without the source code of dbar. Having access 
to the source makes what I am trying somewhat pointless. Is it 
otherwise possible to provide some functionality without having 
to give away your source? I would like to put together a library 
that I can reuse, without having to rely on the source each time. 
Maybe a dll instead?

Note: I don't have a problem with giving away my code. I just 
want to know if it can be done. Or maybe later build a plugin 
system where the creator of the plugin does not need the source 
of the entire application. And in turn the app does not need to 
be recompiled in order to use the plugin.

Thanks for your help!


More information about the Digitalmars-d-learn mailing list