Ah! very good!  I didn't know to look there.  One of the files is basically
the .def file that you'd use.  Microsoft's linker complains about not
understanding
some of the directives, but they're just warnings.  That reduces the problem
to one
of adding the XMLIBEXPORT thing in front of variable exports only.  MUCH
less
pain.

----- Original Message ----- 
From: "Danny Backx" <[EMAIL PROTECTED]>
To: "Dave Williss" <[EMAIL PROTECTED]>
Cc: "LessTif Mailing List" <[EMAIL PROTECTED]>
Sent: Tuesday, June 01, 2004 5:35 PM
Subject: Re: [Lesstif] Exporting functions from DLLs in Windows


> There's stuff in scripts/OS2 which Alexander wrote to do
> similar things for OS/2.
>
> Can it be reused ?
>
> Danny
>
> On Wed, 2004-06-02 at 00:26, Dave Williss wrote:
> > After doing a little more research into .def files, it appears we could
> > use one to export all of the functions.  However, according to the
> > MSDN documentation...
> >
> > "Note that when you export a variable from a DLL with a .def file, you
do
> > not need to specify __declspec(dllexport) on the variable. However, in
any
> > file that uses the DLL, you must still use __declspec(dllimport) on the
> > declaration of data."
> >
> > So in other words, we may only need to add the XMLIBEXPORT to
> > the variables like xmArrowButtonWidgetClass.  And we'd still have to
> > create a file listing all the functions to export.
> >
> > Still a pain, but maybe less pain than adding an XMLIBEXPORT line
> > to every function and vairable that needs to be exported..
> >
> > ----- Original Message ----- 
> > From: "Dave Williss" <[EMAIL PROTECTED]>
> > To: "Danny Backx" <[EMAIL PROTECTED]>
> > Sent: Tuesday, June 01, 2004 9:25 AM
> > Subject: Re: [Lesstif] Exporting functions from DLLs in Windows
> >
> >
> > > The XMLIBEXPORT gets defined to be either  __declspec(dllimport)
> > > or __declspec(dllexport) (or just exern if not compiling on Windows)
> > >
> > > When building the library,  dllexport tells the compiler/linker
> > > to actually make the symbol visible outside the dll.  Without it, its
as
> > > if the entire dll is one module and all the functions are static.
> > > You can accomplish almost the same thing as dllexport by creating a
> > > .def file which lists all the functions to export and passing that to
the
> > > linker.  This, however has other limitations that I'll explain later.
> > >
> > > When an include file is used by code that will eventually link to the
dll
> > > and pull functions from it, the dllimport tells the compiler that the
> > > function
> > > will be coming from a dll, which causes it to behave slightly
differently.
> > > I believe in the past it had to generate a small wrapper function that
> > > would lookup the function in the dll and call it indirectly.  I don't
> > think
> > > they actually do this any more unless you mark the DLL as delay
loaded,
> > > in which case the wrapper loads the DLL if it hasn't already done so.
> > >
> > > The reason that the .def file is useless (unless I'm missing
something) is
> > > that when you export symbols from a dll, they get __imp__ prepended
> > > to the names, and the linker knows what to do with this.  If you don't
> > have
> > > __declspec(dllimport) in front of the prototypes when compiling code
> > > that links to the dll, it won't know that and will look for functions
> > > without
> > > the __imp__.  So you still have to put something in front of every
> > prototype
> > > that's to come out of a dll.
> > >
> > >
> > >
> > >
> > > ----- Original Message ----- 
> > > From: "Danny Backx" <[EMAIL PROTECTED]>
> > > To: "Dave Williss" <[EMAIL PROTECTED]>
> > > Cc: "LessTif Mailing List" <[EMAIL PROTECTED]>
> > > Sent: Monday, May 31, 2004 4:19 AM
> > > Subject: Re: [Lesstif] Exporting functions from DLLs in Windows
> > >
> > >
> > > > I believe Alexander has been doing similar things for OS/2.
> > > > I'll have a peek.
> > > >
> > > > I'm not too familiar with NT. I guess exporting symbols in
> > > > this way makes a difference. Could you tell me exactly what
> > > > it causes ?
> > > >
> > > > Danny
> > > >
> > > > On Fri, 2004-05-28 at 19:57, Dave Williss wrote:
> > > > > I'm building lesstif as a dll on Windows and ran across a problem
> > > > > which is tedious to fix but not very difficult.  The include files
> > > > > don't
> > > > > export anything.
> > > > >
> > > > > To fix this, I added the following lines to Xm/Xm.h
> > > > >
> > > > > #ifdef WIN32
> > > > > #ifdef XMDLL            /* <-- Set this when compiling Lesstif as
a
> > > > > DLL */
> > > > > #define XMLIBEXPORT __declspec(dllexport)
> > > > > #else
> > > > > #define XMLIBEXPORT __declspec(dllimport)
> > > > > #endif
> > > > > #else
> > > > > #define XMLIBEXPORT extern
> > > > > #endif
> > > > >
> > > > > I then went through all the include files and added XMLIBEXPORT
> > > > > in front of every function that needs to be exported (and maybe
some
> > > > > that don't)
> > > > >
> > > > > Now I have a set of Xm include files which export functions from
the
> > > > > DLL, and when my applications include them, they know that the
> > > > > functions
> > > > > are to be imported from a DLL.  This is unnecessary for gcc on
Unix
> > > > > machines, but necessary for Microsoft VC compiler on Windows.
> > > > >
> > > > > The logic on when XMLIBEXPORT is set to what may need to change.
> > > > > It doesn't account for the possibility of static linking on
Windows,
> > > > > for
> > > > > example.
> > > > >
> > > > > Once I had changed all the include files (unfortunately in a
merged Xm
> > > > > directory, not separated out by version like in the distribution)
I
> > > > > used
> > > > > Araxis Merge to generate a diff report for the whole thing.  This
gave
> > > > > a diff file for each changed file.
> > > > >
> > > > > I posted the report on our web site here...
> > > > >
> > > > >     http://www.microimages.com/LesstifIncludeFileChanges/
> > > > >
> > > > > This is temporary.  I'll take it down in a couple weeks.
> > > > >
> > > > > Comments about exporting symbols from the DLL are welcome.
> > > > > If anybody has a better idea, let me know.  If you'd like a better
> > > > > form of diff, tell me know the command line parameters to standard
> > > > > Unix diff to generate the output you'd like.
> > > > >
> > > > >
> > > > >  -- Dave Williss
> > > > > ------
> > > > > Meddle not in the affairs of dragons,
> > > > >    for you are crunchy and taste good with catsup
> > > > -- 
> > > > Danny Backx - danny.backx-at-skynet.be
> > > >
> > > > _______________________________________________
> > > > Lesstif mailing list
> > > > [EMAIL PROTECTED]
> > > > https://terror.hungry.com/mailman/listinfo/lesstif
> > >
> >
> > _______________________________________________
> > Lesstif mailing list
> > [EMAIL PROTECTED]
> > https://terror.hungry.com/mailman/listinfo/lesstif
> -- 
> Danny Backx - danny.backx-at-skynet.be

_______________________________________________
Lesstif mailing list
[EMAIL PROTECTED]
https://terror.hungry.com/mailman/listinfo/lesstif

Reply via email to