How to generate DLL from existing C++ code using DEF file in Visual Studio 2010

c++, dll, dllexport, visual-studio-2010

Solution

After repeatedly coming across this problem for a couple of years I've today found a solution. It's a little hacky, but it actually might be the best possible way with Visual Studio.

Since you don't want to export EVERY possible symbol (especially since your DLL may include large static libraries itself), and you can't edit the files with symbols you want to have available (for me it's because they're 3rd party libraries which must be statically linked to follow their usage pattern), and DEF is the best solution.

If we have:

- Application (EXE)

- Library (DLL)

- Library has .DEF file which means that when you build, symbols listed in the .DEF will be exported to the Library .DLL and listed in the .LIB file.

- .DEF file is empty

- Application links Library's LIB file

NOW BUILD!

OK, we get a lot of linker errors...

Now go to the "Output" tab, and notice that within the text of the output is the symbol names at the end of each linker error line:

We can create a little script with takes the last 'word' of every line, takes off the brackets, and then put that in your DEF file. And it works!

Like I said it's a little hacky (since you only end up with the symbols used by the Application at that time). But actually since you don't want to export everything, and you might need symbols in the libraries which that library statically links, it's probably the most accurate way of going about this.

(NB : In my case it's mostly a problem with trying to get the plugin DLL have access to symbols in the application EXE)

Problem

I've inherited a C++ project, and I need to transform it in a DLL, to use it in other projects. The code is framed in a Visual Studio 2010 solution. I'm able to compile it and generate a DLL file, but there's no associated lib file. I'm not a Windows developer, but seems that I need to export the functions that I want to be used, and there are two ways: - Using __declspec(dllexport) - Using a DEF file First option would imply to manually add __declspec(ddlexport) in front of every class or function I want to export. As there are a lot of classes, and I don't have the control of all the apps which are going to link against the library, the second option (DEF files) looks more promising. Is there any way to generate a DEF file from existing DLL file? I've tried different solutions: - Using expdef. It just crash with no info at all. Using dumpbin. I don't see functions names. Just this: File Type: DLL Summary ``` 1000 .data 2000 .idata 18000 .rdata 5000 .reloc 1000 .rsrc 98000 .text 48000 .textbss ``` Nothing more. I guess that means I'm not exporting anything. But, that's exactly what I'm trying to do. How do I do it?

Original source

Related problems