mmmmmmmm
mmmmmmmm

Reputation: 15533

How to link a .DLL statically?

We have a (pure native C++) .DLL that is build by VS. As clients we have some native C++ applications and a .Net-Wrapper around this DLL written in C++/CLI. Finally there are some client applications for the .Net-Wrapper written in C#.

My problem is that the native.dll must be distributed in a different way than the .Net world works and the VS does not keeps track of that DLL. So to let all my C# Apps work correctly I have to copy it to each executable directory or put it somwhere in %PATH% (which I would avoid on developer computers since they may want to start different apps with different versions of the DLL). Even bigger problems occur if there are UserControls that reference the Wrapper-DLL: You have to copy the DLL to VS's directory or again to %PATH%. But the worst case occurs with our Translator tool. This tool keeps track of .Net-Assemblies and packs them into Translator-packages that can be send to an external translator. As far as I know there is no way to put the native .DLL into that package!

So I plan to link the native DLL statically into the .Net-Wrapper which would solve my problems. But for our Native applications this native DLL must still be a DLL.

So I have two options:

Upvotes: 29

Views: 45755

Answers (4)

kiriloff
kiriloff

Reputation: 26333

You can generate a dll and export the entry point to a lib using dllexport, this is explained here

http://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx

Upvotes: 2

BmanInHouston
BmanInHouston

Reputation: 71

In the C++ project file for the dll, create two configurations, one that generates a DLL and one that generates a .lib. Two projects are not necessary, since any .NET/C++ project can support multiple build configurations (this is how Release and Debug versions build differently).

Upvotes: 7

Ismael
Ismael

Reputation: 3013

Another option is to have two projects, one project will output a .lib which can be statically linked, and a second project which will output a .dll and will have your .lib as dependency, you should add .def to your .dll with the symbols that you are planning to export, or else it will be empty.

Upvotes: 6

SmacL
SmacL

Reputation: 22932

Pick up a copy of DLL to Lib (Edit: If you can't find a cheaper option)

Upvotes: 5

Related Questions