Not all functions were exported using dllexport

Viewed 1771

This question might be similar to DLL Exports: not all my functions are exported but as it was not fully answered there, I have to ask again. Also my case is because of the use of templates and exporting the whole classes slightly different.

Used environment: VS2008, cl9.0.

I have created a dll-project and added about 40 files (each class a file), mainly headers, because a lot of the classes are templates. An example of the heritage would be:

// Class1.h
template<class TYPE>
class TInt
{
    // Some member functions here
    // Also a function bool IsValid() const;
};
// Implementation of template here in the header

// Class2.h
#ifndef DllExpImpM
#define DllExpImpM __declspec(dllimport)
#endif

class DllExpImpM CInt : public TInt<double> 
{ 
    // Some member functions here
};

// Class2.cpp
// Some includes, including "stdafx.h", which sets DllExpImpM 
// to __declspec(dllexport)
template class DllExpImpM TInt<double>;
// Implemenation of CInt

So far, it worked fine as long as I used the debug (compile) option. I was able the use the dll project from other projects.

But if the dll projekt is compiled as release (which works fine), I cannot use it from other projects, because the compiler complains that are some missing functions, e.g. that IsValid() in TInt. I used the dependency walker to check it, and indeed, the compiler is right! The member function IsValid() was not exported, along with another function and with a constructor und the destructor. All other member functions of TInt are exported, I can see them using the dependency walker, I can use them from other projects. This also happens in a similar way with one other class.

I then compared the debug dll and the release dll using the dependency walker and winmerge. They are almost identical, just that the release dll is missing a few functions (about 3 %).

I have no idea what is wrong. I know that I do not have a lot information (the whole information is much too big and I yet could not find a simple example that does not work) and to me all sounds a little bit weird. But perhaps anyone out there once had the same problem. I appreciate every idea very much.

Thank you!

2 Answers
Related