views:

128

answers:

2

I got a .h file, two .lib files, a .dll file and a tiny test project from a hardware vendor to talk to their hardware.

Compiling and running their test project works just fine. Noteworthy: they don't use the .dll. I can throw the dll-directory and all of it's content away, everything works just fine.

To start things off I simply copied the communication parts of their code (connect, disconnect and send a command) into my project. This is actually all that you can do. I have included the .h file and pointed to the directory containing the .lib files. Just like in the tiny test project. It all compiles, but when I try to run the project complains that it is missing the .dll file.

Can anybody explain what is happening? How are libs and dlls supposed to work?

All of this is on windows, VS2005. I compared the .vcproj files and could not find any significant differences.

+1  A: 

Basically the answer depends on whether you are going to use static or dynamic linking for your executable.

With static linking, you need the .h and .lib files but not the .dll files to compile and link. Your executable will be larger but you won't need any of the .h/.lib/.dll files during runtime.

With dynamic linking, you just need the .h files to compile and link. Your executable will be smaller but you will need one or both of the .dll files during runtime.

For a more detailed treatment of this from the Visual Studio perspective, check out http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx -

"Dynamic linking differs from static linking in that it allows an executable module (either a .dll or .exe file) to include only the information needed at run time to locate the executable code for a DLL function. In static linking, the linker gets all of the referenced functions from the static link library and places it with your code into your executable."

Steven
+1  A: 

The test project is statically linked - the lib is included in the exe.

Your project is dynamically linked - the dll is referenced and therefore needed at runtime.

See this Stack Overflow question for more information.

ChrisF
Where in VS do I set that I want a statically (or dynamically) linked project?
AnnaR
You need to set this up when you create the project. It is possible to change it, but involves editing the project files.
ChrisF
Sure! I'll happily edit the project file! I just need to know what to change.
AnnaR