Re: [sigc] Compiling libsic++ as a DLL under Windows



Hi Arnaud!

We would happily accept a patch against cvs. Please modify the affected header files to include sigc++config.h. Don't forget that most header files get generated from .m4 files in the macros/ subdirectories; these are the files to modify.

sigc++config.h is also generated by the configure script, so please add the #defines in sigc++config.h.in. We already need a patch that provides (and makes the library use) a pregenerated sigc++config.h in the MSVC project directory. Maybe you can also include this in your patch.

Thanks!

 Martin


Am 28.07.2004 11:34:07 schrieb(en) Arnaud Debaene:
I am trying to build a Win32 DLL from libsigc++ (see
http://lists.gnome.org/archives/libsigc-list/2004-July/msg00027.html
for
another message on the subject).



Among other things, I need to export some symbols from the DLL using
the
__declspec(dllexport) Microsoft stuff. I have therefore defined a
SIC_API macro as suggested by James Lin.



The macro is used on several places:

connection.h :

   l 39 : struct SIGC_API connection



trackable.h :

   l 35 : struct SIGC_API trackable_callback

   l 49 : struct SIGC_API signal_base : public trackable

   l 89 : struct SIGC_API trackable



signal_base.h :

   l 43 : struct SIGC_API signal_impl

   l 139 : struct SIGC_API signal_exec

   l 195 : struct SIGC_API signal_base : public trackable



adaptors\lambda\select.h :

   l 335 : SIGC_API extern const lambda<internal::lambda_select1> _1;

             SIGC_API extern const lambda<internal::lambda_select2>
_2;

             SIGC_API extern const lambda<internal::lambda_select3>
_3;

             SIGC_API extern const lambda<internal::lambda_select4>
_4;

             SIGC_API extern const lambda<internal::lambda_select5>
_5;

             SIGC_API extern const lambda<internal::lambda_select6>
_6;

             SIGC_API extern const lambda<internal::lambda_select7>
_7;



Functors\slot_base.h :

   l 52 : struct SIGC_API slot_rep : public trackable

   l 123 : struct SIGC_API slot_do_bind

   l 141 : struct SIGC_API slot_do_unbind

   l 206 : class SIGC_API slot_base : public functor_base



These are all the symbols I have identified that need to be exported
from the DLL (basically, that is everything that is non template).



Now, the definition of the SIGC_API macro should be (according to MS
standard way of doing things):



#ifndef SIGC_API

#ifdef _MSC_VER    //Visual C++ only

#ifdef SIGC_DLL_EXPORT

#define SIGC_API __declspec(dllexport)

#else

#define SIGC_API __declspec(dllimport)

#endif

#else

#define SIGC_API

#endif

#endif



And SIGC_DLL_EXPORT should be defined in the Visual C++ project file
used to build the DLL.



My question is: *WHERE* do I put the SIGC_MACRO definition?
sigc++_config.h sounds like a good candidate, but it isn't #included
by
all the headers where this macro is used. In fact there doesn't seems
to
be a common header included by everyone where I could put it.  In
LibSigC++ 1.2, it was done in sigcconfig.h, but there does not seems
to
be an equivalent in version 2.



Thanks for any idea.



PS: Once this problem solved, I could post an updated version of the
Visual C++ project, if it may help.




_______________________________________________
libsigc-list mailing list
libsigc-list gnome org
http://mail.gnome.org/mailman/listinfo/libsigc-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]