
Hi,
I am not much of a Windows programmer, so I have a basic question. I want to make a library that (among other stuff) defines an exception like this:
#include

On Mon, Jul 28, 2008 at 8:36 AM, Andrej van der Zee
Hi,
I am not much of a Windows programmer, so I have a basic question. I want to make a library that (among other stuff) defines an exception like this:
#include
namespace speedo {
typedef boost::error_info
error_info; class __declspec(dllexport) exception : public boost::exception { };
}
When I try to compile this, I get the following warning:
c:\cygwin\home\andrej\speedo\trunk\util\exception.h(14) : warning C4275: non dll-interface class 'boost::exception' used as base for dll-interface class 'speedo::exception' C:\cygwin\home\Andrej\speedo\trunk\boost/exception/exception.hpp(47) : see declaration of 'boost::exception' c:\cygwin\home\andrej\speedo\trunk\util\exception.h(13) : see declaration of 'speedo::exception'
Is this a problem, and, how do I get rid of this without changing the boost-exception lib itself?
Cheers, Andrej
Try putting the __decspec modifier on each (public) method of your exception class rather than on the class itself. IIRC, that stops MSVC whinging about not having a __declspec on the base class. HTH Stuart Dootson

I usually ignored this warning. I'm not sure what can happen as the result. Peter
#include
namespace speedo {
typedef boost::error_info
error_info; class __declspec(dllexport) exception : public boost::exception { };
}
When I try to compile this, I get the following warning:
c:\cygwin\home\andrej\speedo\trunk\util\exception.h(14) : warning C4275: non dll-interface class 'boost::exception' used as base for dll-interfa ce class 'speedo::exception' C:\cygwin\home\Andrej\speedo\trunk\boost/exception/exception.hpp (47) : see declaration of 'boost::exception' c:\cygwin\home\andrej\speedo\trunk\util\exception.h(13) : see de claration of 'speedo::exception'
Is this a problem, and, how do I get rid of this without changing the bo ost-exception lib itself?

#include
namespace speedo {
typedef boost::error_info
error_info; class __declspec(dllexport) exception : public boost::exception { };
}
When I try to compile this, I get the following warning:
c:\cygwin\home\andrej\speedo\trunk\util\exception.h(14) : warning C4275: non
Andrej van der Zee
'boost::exception' used as base for dll-interface class 'speedo::exception' C:\cygwin\home\Andrej\speedo\trunk\boost/exception/exception.hpp (47) : see declaration of 'boost::exception' c:\cygwin\home\andrej\speedo\trunk\util\exception.h(13) : see declaration of 'speedo::exception'
Is this a problem, and, how do I get rid of this without changing the boost- exception lib itself?
The exported attribute indicates that all functions from the class are exported. The warning is that you can potentially call a non exported function from the base class, e.g.: struct public Base { void Foo1(); //impl. in cpp }; struct __declspec(dllexport) Derived : public Base { void Foo2(); //impl. in cpp }; void Foo() { Derived d; d.Foo1(); //error, but at least a linker error d.Foo2(); } wkr, me

You can ignore 4275 for pure header template classes. The only risk is if you have different definitions for the template or any of its parameters (which is bad for other reasons, which are likely to trip you up before 4275 manifests).
You could try this -
In the header:
template struct __declspec(dllexport) boost::error_info
I am not much of a Windows programmer, so I have a basic question. I want to make a library that (among other stuff) defines an exception like this:
#include
namespace speedo {
typedef boost::error_info
error_info; class __declspec(dllexport) exception : public boost::exception { };
}
When I try to compile this, I get the following warning:
c:\cygwin\home\andrej\speedo\trunk\util\exception.h(14) : warning C4275: non dll-interface class 'boost::exception' used as base for dll-interface class 'speedo::exception'
participants (5)
-
Alan M. Carroll
-
Andrej van der Zee
-
gast128
-
peter_foelscheļ¼ agilent.com
-
Stuart Dootson