EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  <20112012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  <20112012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Sequencer build errors on Windows
From: Benjamin Franksen <[email protected]>
To: Mark Rivers <[email protected]>
Cc: [email protected], [email protected]
Date: Mon, 19 Dec 2011 14:55:31 +0100
On Friday, December 16, 2011, Mark Rivers wrote:
> I normally build statically on win32-x86, so I don't have a lot of
> experience with ensuring that the functions are visible in DLLs.
> However, I know that I did make it work with the asynPortDriver class in
> asyn, and this is what I did:
>
> /** Base class for asyn port drivers; handles most of the bookkeeping for
> writing an asyn port driver * with standard asyn interfaces and a
> parameter library. */
> class epicsShareFunc asynPortDriver {
> public:
>     asynPortDriver(const char *portName, int maxAddr, int paramTableSize,
> int interfaceMask, int interruptMask, int asynFlags, int autoConnect,
> int priority, int stackSize); virtual ~asynPortDriver();
>     virtual asynStatus lock();
>     virtual asynStatus unlock();
>     virtual asynStatus getAddress(asynUser *pasynUser, int *address);
>     virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
>     virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
>     virtual asynStatus readUInt32Digital(asynUser *pasynUser, epicsUInt32
> *value, epicsUInt32 mask); virtual asynStatus
> writeUInt32Digital(asynUser *pasynUser, epicsUInt32 value, epicsUInt32
> mask); ...
>
> So it was sufficient to declare the class with epicsShareFunc, not the
> individual methods.  I am quite sure that my test application that uses
> this class linked fine when building dynamically.

Thanks Mark.

I see now that in EPICS base the exported classes all have an
'epicsShareClass' qualifier, and now I also see that there is some
documentation in comments in shareLib.h which explicitly says to do it like
that (and not to decorate the individual methods). If I add
'epicsShareClass' to all the exported classes (in pv.h) and remove all
'epicsSharefunc' on methods all seems fine, see the attached output of the
dumpbin command.

I also attached a patch that makes this change, and also uploaded a new
snapshot to the website.

Josh, could you check that this fixes your build problem on mingw32?

Cheers
Ben

________________________________

Helmholtz-Zentrum Berlin für Materialien und Energie GmbH

Mitglied der Hermann von Helmholtz-Gemeinschaft Deutscher Forschungszentren e.V.

Aufsichtsrat: Vorsitzender Prof. Dr. Dr. h.c. mult. Joachim Treusch, stv. Vorsitzende Dr. Beatrix Vierkorn-Rudolph
Geschäftsführer: Prof. Dr. Anke Rita Kaysser-Pyzalla, Dr. Ulrich Breuer

Sitz Berlin, AG Charlottenburg, 89 HRB 5583

Postadresse:
Hahn-Meitner-Platz 1
D-14109 Berlin

http://www.helmholtz-berlin.de
Mon Dec 19 14:37:46 CET 2011  [email protected]
  * pv: replace epicsShareFunc in class methods by epicsShareClass in class declarations
  
  This fixes a build problem on mingw32.
diff -rN -u old-branch-2-1/src/pv/pvCa.cc new-branch-2-1/src/pv/pvCa.cc
--- old-branch-2-1/src/pv/pvCa.cc	2011-12-19 14:40:29.948474852 +0100
+++ new-branch-2-1/src/pv/pvCa.cc	2011-12-19 14:40:30.224297935 +0100
@@ -61,7 +61,7 @@
  *
  * Description:	
  */
-epicsShareFunc caSystem::caSystem( int debug ) :
+caSystem::caSystem( int debug ) :
     pvSystem( debug ),
     context_( NULL )
 {
@@ -79,7 +79,7 @@
  *
  * Description:	
  */
-epicsShareFunc caSystem::~caSystem()
+caSystem::~caSystem()
 {
     if ( getDebug() > 0 )
 	printf( "%8p: caSystem::~caSystem()\n", this );
@@ -94,7 +94,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caSystem::attach()
+pvStat caSystem::attach()
 {
     if ( getDebug() > 0 )
         printf( "%8p: caSystem::attach()\n", this );
@@ -110,7 +110,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caSystem::flush()
+pvStat caSystem::flush()
 {
     if ( getDebug() > 0 )
         printf( "%8p: caSystem::flush()\n", this );
@@ -126,7 +126,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caSystem::pend( double seconds, int wait )
+pvStat caSystem::pend( double seconds, int wait )
 {
     if ( getDebug() > 1 )
         printf( "%8p: caSystem::pend( %g, %d )\n", this, seconds, wait );
@@ -143,7 +143,7 @@
  *
  * Description:
  */
-epicsShareFunc pvVariable *caSystem::newVariable( const char *name, pvConnFunc func, void *priv,
+pvVariable *caSystem::newVariable( const char *name, pvConnFunc func, void *priv,
 				   int debug )
 {
     if ( getDebug() > 0 )
@@ -161,7 +161,7 @@
  *
  * Description:
  */
-epicsShareFunc caVariable::caVariable( caSystem *system, const char *name, pvConnFunc func,
+caVariable::caVariable( caSystem *system, const char *name, pvConnFunc func,
 		        void *priv, int debug ) :
     pvVariable( system, name, func, priv, debug ),
     chid_( NULL )
@@ -183,7 +183,7 @@
  *
  * Description:
  */
-epicsShareFunc caVariable::~caVariable()
+caVariable::~caVariable()
 {
     if ( getDebug() > 0 )
         printf( "%8p: caVariable::~caVariable()\n", this );
@@ -198,7 +198,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::get( pvType type, unsigned count, pvValue *value )
+pvStat caVariable::get( pvType type, unsigned count, pvValue *value )
 {
     if ( getDebug() > 0 )
         printf( "%8p: caVariable::get( %d, %d )\n", this, type, count );
@@ -226,7 +226,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::getNoBlock( pvType type, unsigned count, pvValue *value )
+pvStat caVariable::getNoBlock( pvType type, unsigned count, pvValue *value )
 {
     if ( getDebug() > 0 )
         printf( "%8p: caVariable::getNoBlock( %d, %d )\n", this,
@@ -244,7 +244,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::getCallback( pvType type, unsigned count,
+pvStat caVariable::getCallback( pvType type, unsigned count,
 			        pvEventFunc func, void *arg )
 {
     if ( getDebug() > 0 )
@@ -266,7 +266,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::put( pvType type, unsigned count, pvValue *value )
+pvStat caVariable::put( pvType type, unsigned count, pvValue *value )
 {
     if ( getDebug() > 0 )
         printf( "%8p: caVariable::put( %d, %d )\n", this, type, count );
@@ -291,7 +291,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::putNoBlock( pvType type, unsigned count, pvValue *value )
+pvStat caVariable::putNoBlock( pvType type, unsigned count, pvValue *value )
 {
     if ( getDebug() > 0 )
         printf( "%8p: caVariable::putNoBlock( %d, %d )\n", this,
@@ -315,7 +315,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::putCallback( pvType type, unsigned count, pvValue *value,
+pvStat caVariable::putCallback( pvType type, unsigned count, pvValue *value,
 			        pvEventFunc func, void *arg )
 {
     if ( getDebug() > 0 )
@@ -337,7 +337,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::monitorOn( pvType type, unsigned count, pvEventFunc func,
+pvStat caVariable::monitorOn( pvType type, unsigned count, pvEventFunc func,
 			      void *arg, pvCallback **pCallback )
 {
     if ( getDebug() > 0 )
@@ -365,7 +365,7 @@
  *
  * Description:
  */
-epicsShareFunc pvStat caVariable::monitorOff( pvCallback *callback )
+pvStat caVariable::monitorOff( pvCallback *callback )
 {
     if ( getDebug() > 0 )
         printf( "%8p: caVariable::monitorOff()\n", this );
@@ -387,7 +387,7 @@
  *
  * Description:
  */
-epicsShareFunc int caVariable::getConnected() const
+int caVariable::getConnected() const
 {
     if ( getDebug() > 1 )
         printf( "%8p: caVariable::getConnected()\n", this );
@@ -402,7 +402,7 @@
  *
  * Description:
  */
-epicsShareFunc pvType caVariable::getType() const
+pvType caVariable::getType() const
 {
     if ( getDebug() > 1 )
         printf( "%8p: caVariable::getType()\n", this );
@@ -417,7 +417,7 @@
  *
  * Description:
  */
-epicsShareFunc unsigned caVariable::getCount() const
+unsigned caVariable::getCount() const
 {
     if ( getDebug() > 1 )
         printf( "%8p: caVariable::getCount()\n", this );
diff -rN -u old-branch-2-1/src/pv/pvCa.h new-branch-2-1/src/pv/pvCa.h
--- old-branch-2-1/src/pv/pvCa.h	2011-12-19 14:40:29.948474852 +0100
+++ new-branch-2-1/src/pv/pvCa.h	2011-12-19 14:40:30.224297935 +0100
@@ -22,14 +22,14 @@
 class caSystem : public pvSystem {
 
 public:
-    epicsShareFunc caSystem( int debug = 0 );
-    epicsShareFunc ~caSystem();
+    caSystem( int debug = 0 );
+    ~caSystem();
 
-    epicsShareFunc virtual pvStat attach();
-    epicsShareFunc virtual pvStat flush();
-    epicsShareFunc virtual pvStat pend( double seconds = 0.0, int wait = FALSE );
+    virtual pvStat attach();
+    virtual pvStat flush();
+    virtual pvStat pend( double seconds = 0.0, int wait = FALSE );
 
-    epicsShareFunc virtual pvVariable *newVariable( const char *name, pvConnFunc func = NULL,
+    virtual pvVariable *newVariable( const char *name, pvConnFunc func = NULL,
 				     void *priv = NULL, int debug = 0 );
 
 private:
@@ -42,26 +42,26 @@
 class caVariable : public pvVariable {
 
 public:
-    epicsShareFunc caVariable( caSystem *system, const char *name, pvConnFunc func = NULL,
+    caVariable( caSystem *system, const char *name, pvConnFunc func = NULL,
 		void *priv = NULL, int debug = 0 );
-    epicsShareFunc ~caVariable();
+    ~caVariable();
 
-    epicsShareFunc virtual pvStat get( pvType type, unsigned count, pvValue *value );
-    epicsShareFunc virtual pvStat getNoBlock( pvType type, unsigned count, pvValue *value );
-    epicsShareFunc virtual pvStat getCallback( pvType type, unsigned count,
+    virtual pvStat get( pvType type, unsigned count, pvValue *value );
+    virtual pvStat getNoBlock( pvType type, unsigned count, pvValue *value );
+    virtual pvStat getCallback( pvType type, unsigned count,
 		pvEventFunc func, void *arg = NULL );
-    epicsShareFunc virtual pvStat put( pvType type, unsigned count, pvValue *value );
-    epicsShareFunc virtual pvStat putNoBlock( pvType type, unsigned count, pvValue *value );
-    epicsShareFunc virtual pvStat putCallback( pvType type, unsigned count, pvValue *value,
+    virtual pvStat put( pvType type, unsigned count, pvValue *value );
+    virtual pvStat putNoBlock( pvType type, unsigned count, pvValue *value );
+    virtual pvStat putCallback( pvType type, unsigned count, pvValue *value,
 		pvEventFunc func, void *arg = NULL );
-    epicsShareFunc virtual pvStat monitorOn( pvType type, unsigned count,
+    virtual pvStat monitorOn( pvType type, unsigned count,
 		pvEventFunc func, void *arg = NULL,
 		pvCallback **pCallback = NULL );
-    epicsShareFunc virtual pvStat monitorOff( pvCallback *callback = NULL );
+    virtual pvStat monitorOff( pvCallback *callback = NULL );
 
-    epicsShareFunc virtual int getConnected() const;
-    epicsShareFunc virtual pvType getType() const;
-    epicsShareFunc virtual unsigned getCount() const;
+    virtual int getConnected() const;
+    virtual pvType getType() const;
+    virtual unsigned getCount() const;
 
 private:
     chid chid_;		/* channel access id */
diff -rN -u old-branch-2-1/src/pv/pv.cc new-branch-2-1/src/pv/pv.cc
--- old-branch-2-1/src/pv/pv.cc	2011-12-19 14:40:29.948474852 +0100
+++ new-branch-2-1/src/pv/pv.cc	2011-12-19 14:40:30.216303061 +0100
@@ -20,7 +20,7 @@
  *
  * Description:	
  */
-epicsShareFunc pvSystem::pvSystem( int debug ) :
+pvSystem::pvSystem( int debug ) :
 
     magic_( PV_MAGIC ),
     debug_( debug ),
@@ -43,7 +43,7 @@
  *
  * Description:	
  */
-epicsShareFunc pvSystem::~pvSystem()
+pvSystem::~pvSystem()
 {
     if ( getDebug() > 0 )
 	printf( "%8p: pvSystem::~pvSystem()\n", (void *)this );
@@ -59,7 +59,7 @@
  *
  * Function value:
  */
-epicsShareFunc void pvSystem::lock()
+void pvSystem::lock()
 {
     epicsMutexMustLock( lock_ );
 
@@ -67,7 +67,7 @@
 	printf( "%8p: pvSystem::lock()\n", (void *)this );
 }
 
-epicsShareFunc void pvSystem::unlock()
+void pvSystem::unlock()
 {
     epicsMutexUnlock( lock_ );
 
@@ -85,7 +85,7 @@
  *
  * Function value:
  */
-epicsShareFunc void pvSystem::setError( int status, pvSevr sevr, pvStat stat,
+void pvSystem::setError( int status, pvSevr sevr, pvStat stat,
 			 const char *mess )
 {
     status_ = status;
diff -rN -u old-branch-2-1/src/pv/pv.h new-branch-2-1/src/pv/pv.h
--- old-branch-2-1/src/pv/pv.h	2011-12-19 14:40:29.948474852 +0100
+++ new-branch-2-1/src/pv/pv.h	2011-12-19 14:40:30.220300500 +0100
@@ -66,37 +66,37 @@
  * This is somewhat analogous to a cdevSystem object (CA has no equivalent)
  */
 
-class pvSystem {
+class epicsShareClass pvSystem {
 
 public:
-    epicsShareFunc pvSystem( int debug = 0 );
-    epicsShareFunc virtual ~pvSystem();
+    pvSystem( int debug = 0 );
+    virtual ~pvSystem();
 
-    epicsShareFunc inline pvSystem *getSystem() { return this; } 
+    inline pvSystem *getSystem() { return this; } 
 
-    epicsShareFunc virtual pvStat attach() { return pvStatOK; }
-    epicsShareFunc virtual pvStat flush() { return pvStatOK; }
-    epicsShareFunc virtual pvStat pend( double seconds = 0.0, int wait = FALSE ) = 0;
+    virtual pvStat attach() { return pvStatOK; }
+    virtual pvStat flush() { return pvStatOK; }
+    virtual pvStat pend( double seconds = 0.0, int wait = FALSE ) = 0;
 
-    epicsShareFunc virtual pvVariable *newVariable( const char *name, pvConnFunc func = NULL,
+    virtual pvVariable *newVariable( const char *name, pvConnFunc func = NULL,
 				     void *priv = NULL, int debug = 0 ) = 0;
 
 #if 0
-    epicsShareFunc void lock();
-    epicsShareFunc void unlock();
+    void lock();
+    void unlock();
 #endif
 
-    epicsShareFunc inline int getMagic() const { return magic_; }
-    epicsShareFunc inline void setDebug( int debug ) { debug_ = debug; }
-    epicsShareFunc inline int getDebug() const { return debug_; }
-
-    epicsShareFunc void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
-    epicsShareFunc inline int getStatus() const { return status_; }
-    epicsShareFunc inline pvSevr getSevr() const { return sevr_; }
-    epicsShareFunc inline pvStat getStat() const { return stat_; }
-    epicsShareFunc inline void setStatus( int status ) { status_ = status; }
-    epicsShareFunc inline void setStat( pvStat stat ) { stat_ = stat; }
-    epicsShareFunc inline const char *getMess() const { return mess_?mess_:""; }
+    inline int getMagic() const { return magic_; }
+    inline void setDebug( int debug ) { debug_ = debug; }
+    inline int getDebug() const { return debug_; }
+
+    void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
+    inline int getStatus() const { return status_; }
+    inline pvSevr getSevr() const { return sevr_; }
+    inline pvStat getStat() const { return stat_; }
+    inline void setStatus( int status ) { status_ = status; }
+    inline void setStat( pvStat stat ) { stat_ = stat; }
+    inline const char *getMess() const { return mess_?mess_:""; }
 
 private:
     int		magic_;		/* magic number (used for authentication) */
@@ -118,49 +118,49 @@
  *
  * This is somewhat analogous to a cdevDevice object (or a CA channel)
  */
-class pvVariable {
+class epicsShareClass pvVariable {
 
 public:
     // private data is constructor argument so that it is guaranteed set
     // before connection callback is invoked
-    epicsShareFunc pvVariable( pvSystem *system, const char *name, pvConnFunc func = NULL,
+    pvVariable( pvSystem *system, const char *name, pvConnFunc func = NULL,
 		void *priv = NULL, int debug = 0 );
-    epicsShareFunc virtual ~pvVariable();
+    virtual ~pvVariable();
 
-    epicsShareFunc virtual pvStat get( pvType type, unsigned count, pvValue *value ) = 0;
-    epicsShareFunc virtual pvStat getNoBlock( pvType type, unsigned count, pvValue *value ) = 0;
-    epicsShareFunc virtual pvStat getCallback( pvType type, unsigned count,
+    virtual pvStat get( pvType type, unsigned count, pvValue *value ) = 0;
+    virtual pvStat getNoBlock( pvType type, unsigned count, pvValue *value ) = 0;
+    virtual pvStat getCallback( pvType type, unsigned count,
 		pvEventFunc func, void *arg = NULL ) = 0;
-    epicsShareFunc virtual pvStat put( pvType type, unsigned count, pvValue *value ) = 0;
-    epicsShareFunc virtual pvStat putNoBlock( pvType type, unsigned count, pvValue *value ) = 0;
-    epicsShareFunc virtual pvStat putCallback( pvType type, unsigned count, pvValue *value,
+    virtual pvStat put( pvType type, unsigned count, pvValue *value ) = 0;
+    virtual pvStat putNoBlock( pvType type, unsigned count, pvValue *value ) = 0;
+    virtual pvStat putCallback( pvType type, unsigned count, pvValue *value,
 		pvEventFunc func, void *arg = NULL ) = 0;
-    epicsShareFunc virtual pvStat monitorOn( pvType type, unsigned count,
+    virtual pvStat monitorOn( pvType type, unsigned count,
 		pvEventFunc func, void *arg = NULL,
 		pvCallback **pCallback = NULL ) = 0;
-    epicsShareFunc virtual pvStat monitorOff( pvCallback *callback = NULL ) = 0;
+    virtual pvStat monitorOff( pvCallback *callback = NULL ) = 0;
 
-    epicsShareFunc virtual int getConnected() const = 0;
-    epicsShareFunc virtual pvType getType() const = 0;
-    epicsShareFunc virtual unsigned getCount() const = 0;
-
-    epicsShareFunc inline int getMagic() const { return magic_; }
-    epicsShareFunc inline void setDebug( int debug ) { debug_ = debug; }
-    epicsShareFunc inline int getDebug() const { return debug_; }
-    epicsShareFunc inline pvConnFunc getFunc() const { return func_; }
-
-    epicsShareFunc inline pvSystem *getSystem() const { return system_; }
-    epicsShareFunc inline char *getName() const { return name_; }
-    epicsShareFunc inline void setPrivate( void *priv ) { private_ = priv; }
-    epicsShareFunc inline void *getPrivate() const { return private_; }
-
-    epicsShareFunc void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
-    epicsShareFunc inline int getStatus() const { return status_; }
-    epicsShareFunc inline pvSevr getSevr() const { return sevr_; }
-    epicsShareFunc inline pvStat getStat() const { return stat_; }
-    epicsShareFunc inline void setStatus( int status ) { status_ = status; }
-    epicsShareFunc inline void setStat( pvStat stat ) { stat_ = stat; }
-    epicsShareFunc inline const char *getMess() const { return mess_?mess_:""; }
+    virtual int getConnected() const = 0;
+    virtual pvType getType() const = 0;
+    virtual unsigned getCount() const = 0;
+
+    inline int getMagic() const { return magic_; }
+    inline void setDebug( int debug ) { debug_ = debug; }
+    inline int getDebug() const { return debug_; }
+    inline pvConnFunc getFunc() const { return func_; }
+
+    inline pvSystem *getSystem() const { return system_; }
+    inline char *getName() const { return name_; }
+    inline void setPrivate( void *priv ) { private_ = priv; }
+    inline void *getPrivate() const { return private_; }
+
+    void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
+    inline int getStatus() const { return status_; }
+    inline pvSevr getSevr() const { return sevr_; }
+    inline pvStat getStat() const { return stat_; }
+    inline void setStatus( int status ) { status_ = status; }
+    inline void setStat( pvStat stat ) { stat_ = stat; }
+    inline const char *getMess() const { return mess_?mess_:""; }
 
 private:
     int		magic_;		/* magic number (used for authentication) */
@@ -186,24 +186,24 @@
 #include "tsFreeList.h"
 #include "epicsSingleton.h"
 
-class pvCallback {
+class epicsShareClass pvCallback {
 
 public:
-    epicsShareFunc pvCallback( pvVariable *variable, pvType type, unsigned count,
+    pvCallback( pvVariable *variable, pvType type, unsigned count,
 		pvEventFunc func, void *arg, int debug = 0);
-    epicsShareFunc ~pvCallback();
+    ~pvCallback();
 
-    epicsShareFunc inline int getMagic() { return magic_; }
-    epicsShareFunc inline void setDebug( int debug ) { debug_ = debug; }
-    epicsShareFunc inline int getDebug() { return debug_; }
-
-    epicsShareFunc inline pvVariable *getVariable() { return variable_; }
-    epicsShareFunc inline pvType getType() { return type_; }
-    epicsShareFunc inline unsigned getCount() { return count_; };
-    epicsShareFunc inline pvEventFunc getFunc() { return func_; };
-    epicsShareFunc inline void *getArg() { return arg_; };
-    epicsShareFunc inline void setPrivate( void *priv ) { private_ = priv; }
-    epicsShareFunc inline void *getPrivate() { return private_; }
+    inline int getMagic() { return magic_; }
+    inline void setDebug( int debug ) { debug_ = debug; }
+    inline int getDebug() { return debug_; }
+
+    inline pvVariable *getVariable() { return variable_; }
+    inline pvType getType() { return type_; }
+    inline unsigned getCount() { return count_; };
+    inline pvEventFunc getFunc() { return func_; };
+    inline void *getArg() { return arg_; };
+    inline void setPrivate( void *priv ) { private_ = priv; }
+    inline void *getPrivate() { return private_; }
 
     // static inline void* operator new(size_t size);
     // static inline void operator delete(void *pCadaver, size_t size);
diff -rN -u old-branch-2-1/src/pv/pvKtl.h new-branch-2-1/src/pv/pvKtl.h
--- old-branch-2-1/src/pv/pvKtl.h	2011-12-19 14:40:29.952472289 +0100
+++ new-branch-2-1/src/pv/pvKtl.h	2011-12-19 14:40:30.232292806 +0100
@@ -41,8 +41,8 @@
 class ktlNode {
 
 public:
-    epicsShareFunc inline void setData( const void * data ) { data_ = data; }
-    epicsShareFunc inline const void *getData() const { return data_; }
+    inline void setData( const void * data ) { data_ = data; }
+    inline const void *getData() const { return data_; }
 
 private:
     ELLNODE node_;
@@ -55,17 +55,17 @@
 class ktlSystem : public pvSystem {
 
 public:
-    epicsShareFunc ktlSystem( int debug = 0 );
-    epicsShareFunc ~ktlSystem();
+    ktlSystem( int debug = 0 );
+    ~ktlSystem();
 
-    epicsShareFunc virtual pvStat attach();
-    epicsShareFunc virtual pvStat flush();
-    epicsShareFunc virtual pvStat pend( double seconds = 0.0, int wait = FALSE );
+    virtual pvStat attach();
+    virtual pvStat flush();
+    virtual pvStat pend( double seconds = 0.0, int wait = FALSE );
 
-    epicsShareFunc virtual pvVariable *newVariable( const char *name, pvConnFunc func = NULL,
+    virtual pvVariable *newVariable( const char *name, pvConnFunc func = NULL,
 				     void *priv = NULL, int debug = 0 );
 
-    epicsShareFunc int getAttach() const { return attach_; }
+    int getAttach() const { return attach_; }
 
 private:
     int attach_;		/* whether to attach on open */
@@ -77,37 +77,37 @@
 class ktlService {
 
 public:
-    epicsShareFunc ktlService( ktlSystem *system, const char *name, int debug = 0 );
-    epicsShareFunc ~ktlService();
+    ktlService( ktlSystem *system, const char *name, int debug = 0 );
+    ~ktlService();
 
-    epicsShareFunc static ktlService *getService( ktlSystem *system, char *name,
+    static ktlService *getService( ktlSystem *system, char *name,
 				   int debug = 0 );
 
-    epicsShareFunc inline void setDebug( int debug ) { debug_ = debug; }
-    epicsShareFunc inline int getDebug() const { return debug_; }
+    inline void setDebug( int debug ) { debug_ = debug; }
+    inline int getDebug() const { return debug_; }
 
-    epicsShareFunc inline char *getName() const { return name_; }
-    epicsShareFunc inline KTL_HANDLE *getHandle() const { return handle_; }
-    epicsShareFunc inline int getFlags() const { return flags_; }
-
-    epicsShareFunc void add( const ktlKeyword *keyword );
-    epicsShareFunc void remove( const ktlKeyword *keyword );
-    epicsShareFunc ktlKeyword *find( const char *keyName );
+    inline char *getName() const { return name_; }
+    inline KTL_HANDLE *getHandle() const { return handle_; }
+    inline int getFlags() const { return flags_; }
+
+    void add( const ktlKeyword *keyword );
+    void remove( const ktlKeyword *keyword );
+    ktlKeyword *find( const char *keyName );
 
-    epicsShareFunc static ktlService *first();
-    epicsShareFunc ktlService *next() const;
+    static ktlService *first();
+    ktlService *next() const;
 
-    epicsShareFunc static fd_set *getFdsetsAll();
-    epicsShareFunc static pvStat dispatchAll();
+    static fd_set *getFdsetsAll();
+    static pvStat dispatchAll();
 
     // provide same error-handling interface as system and variable
-    epicsShareFunc void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
-    epicsShareFunc inline int getStatus() const { return status_; }
-    epicsShareFunc inline pvSevr getSevr() const { return sevr_; }
-    epicsShareFunc inline pvStat getStat() const { return stat_; }
-    epicsShareFunc inline void setStatus( int status ) { status_ = status; }
-    epicsShareFunc inline void setStat( pvStat stat ) { stat_ = stat; }
-    epicsShareFunc inline char *getMess() const { return mess_?mess_:(char *)""; }
+    void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
+    inline int getStatus() const { return status_; }
+    inline pvSevr getSevr() const { return sevr_; }
+    inline pvStat getStat() const { return stat_; }
+    inline void setStatus( int status ) { status_ = status; }
+    inline void setStat( pvStat stat ) { stat_ = stat; }
+    inline char *getMess() const { return mess_?mess_:(char *)""; }
 
 private:
     int		debug_;         /* debugging level (inherited from varaible) */
@@ -133,35 +133,35 @@
 class ktlKeyword {
 
 public:
-    epicsShareFunc ktlKeyword( ktlService *service, const char *keyName, int debug = 0 );
-    epicsShareFunc ~ktlKeyword();
+    ktlKeyword( ktlService *service, const char *keyName, int debug = 0 );
+    ~ktlKeyword();
 
-    epicsShareFunc static ktlKeyword *getKeyword( ktlService *service, const char *keyName,
+    static ktlKeyword *getKeyword( ktlService *service, const char *keyName,
 				   int debug = 0 );
 
-    epicsShareFunc inline void setDebug( int debug ) { debug_ = debug; }
-    epicsShareFunc inline int getDebug() { return debug_; }
+    inline void setDebug( int debug ) { debug_ = debug; }
+    inline int getDebug() { return debug_; }
 
-    epicsShareFunc inline const ktlService *getService() const { return service_; }
-    epicsShareFunc inline int getFlags() const { return getService()->getFlags(); }
-    epicsShareFunc inline const char *getKeyName() const { return keyName_; }
-    epicsShareFunc inline int getMonitored() { return monitored_; }
-
-    epicsShareFunc int add( ktlVariable *variable );
-    epicsShareFunc void remove( ktlVariable *variable );
-    epicsShareFunc int monitorOn( ktlVariable *variable );
-    epicsShareFunc int monitorOff( ktlVariable *variable );
-    epicsShareFunc ktlVariable *first();
-    epicsShareFunc ktlVariable *next( ktlVariable *variable );
+    inline const ktlService *getService() const { return service_; }
+    inline int getFlags() const { return getService()->getFlags(); }
+    inline const char *getKeyName() const { return keyName_; }
+    inline int getMonitored() { return monitored_; }
+
+    int add( ktlVariable *variable );
+    void remove( ktlVariable *variable );
+    int monitorOn( ktlVariable *variable );
+    int monitorOff( ktlVariable *variable );
+    ktlVariable *first();
+    ktlVariable *next( ktlVariable *variable );
 
     // provide same error-handling interface as system and variable
-    epicsShareFunc void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
-    epicsShareFunc inline int getStatus() const { return status_; }
-    epicsShareFunc inline pvSevr getSevr() const { return sevr_; }
-    epicsShareFunc inline pvStat getStat() const { return stat_; }
-    epicsShareFunc inline void setStatus( int status ) { status_ = status; }
-    epicsShareFunc inline void setStat( pvStat stat ) { stat_ = stat; }
-    epicsShareFunc inline char *getMess() const { return mess_?mess_:(char *)""; }
+    void setError( int status, pvSevr sevr, pvStat stat, const char *mess );
+    inline int getStatus() const { return status_; }
+    inline pvSevr getSevr() const { return sevr_; }
+    inline pvStat getStat() const { return stat_; }
+    inline void setStatus( int status ) { status_ = status; }
+    inline void setStat( pvStat stat ) { stat_ = stat; }
+    inline char *getMess() const { return mess_?mess_:(char *)""; }
 
 private:
     int		debug_;         /* debugging level (inherited from variable) */
V:\seq\head>dumpbin /exports bin\win32-x86\pv.dll
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file bin\win32-x86\pv.dll

File Type: DLL

  Section contains the following exports for pv.dll

    00000000 characteristics
    4EEF3724 time date stamp Mon Dec 19 14:07:48 2011
        0.00 version
           1 ordinal base
         120 number of functions
         120 number of names

    ordinal hint RVA      name

          1    0 000015F0 ??0SingletonUntyped@@QAE@XZ
          2    1 00001020 ??0epicsThreadRunable@@QAE@ABV0@@Z
          3    2 00001010 ??0epicsThreadRunable@@QAE@XZ
          4    3 00001060 ??0epicsTimeEvent@@QAE@ABH@Z
          5    4 000046E0 ??0pvCallback@@QAE@PAVpvVariable@@W4pvType@@IP6AXPAX1IPATpvValue@@2W4pvStat@@@Z2H@Z
          6    5 00001320 ??0pvSystem@@QAE@ABV0@@Z
          7    6 00004820 ??0pvSystem@@QAE@H@Z
          8    7 000014D0 ??0pvVariable@@QAE@ABV0@@Z
          9    8 00004780 ??0pvVariable@@QAE@PAVpvSystem@@PBDP6AXPAXH@Z2H@Z
         10    9 00001610 ??1SingletonUntyped@@QAE@XZ
         11    A 000046C0 ??1pvCallback@@QAE@XZ
         12    B 00004800 ??1pvSystem@@UAE@XZ
         13    C 00004740 ??1pvVariable@@UAE@XZ
         14    D 00001030 ??4epicsThreadPrivateBase@@QAEAAV0@ABV0@@Z
         15    E 00001030 ??4epicsThreadRunable@@QAEAAV0@ABV0@@Z
         16    F 00001220 ??4epicsTime@@QAEAAV0@ABUepicsTimeStamp@@@Z
         17   10 00001250 ??4epicsTime@@QAEAAV0@ABUl_fp@@@Z
         18   11 000011C0 ??4epicsTime@@QAEAAV0@ABUlocal_tm_nano_sec@@@Z
         19   12 00001280 ??4epicsTime@@QAEAAV0@ABUtime_t_wrapper@@@Z
         20   13 000011F0 ??4epicsTime@@QAEAAV0@ABUtimespec@@@Z
         21   14 00001040 ??4epicsTime@@QAEAAV0@ABV0@@Z
         22   15 00001060 ??4epicsTimeEvent@@QAEAAV0@ABV0@@Z
         23   16 00001640 ??4pvCallback@@QAEAAV0@ABV0@@Z
         24   17 00001360 ??4pvSystem@@QAEAAV0@ABV0@@Z
         25   18 00001520 ??4pvVariable@@QAEAAV0@ABV0@@Z
         26   19 00001130 ??8epicsTime@@QBE_NABV0@@Z
         27   1A 00001150 ??9epicsTime@@QBE_NABV0@@Z
         28   1B 00001600 ??BepicsTimeEvent@@QBEHXZ
         29   1C 00001070 ??GepicsTime@@QBE?AV0@ABN@Z
         30   1D 000011A0 ??OepicsTime@@QBE_NABV0@@Z
         31   1E 00001180 ??PepicsTime@@QBE_NABV0@@Z
         32   1F 000010A0 ??YepicsTime@@QAE?AV0@ABN@Z
         33   20 000010E0 ??ZepicsTime@@QAE?AV0@ABN@Z
         34   21 000055E4 ??_7epicsThreadRunable@@6B@
         35   22 00005628 ??_7pvSystem@@6B@
         36   23 000055F4 ??_7pvVariable@@6B@
         37   24 00001000 ??_FepicsEvent@@QAEXXZ
         38   25 00001390 ??_FpvSystem@@QAEXXZ
         39   26 000012C0 ?attach@pvSystem@@UAE?AW4pvStat@@XZ
         40   27 000012C0 ?flush@pvSystem@@UAE?AW4pvStat@@XZ
         41   28 00001470 ?getArg@pvCallback@@QAEPAXXZ
         42   29 00001440 ?getCount@pvCallback@@QAEIXZ
         43   2A 00001420 ?getDebug@pvCallback@@QAEHXZ
         44   2B 000012D0 ?getDebug@pvSystem@@QBEHXZ
         45   2C 000012D0 ?getDebug@pvVariable@@QBEHXZ
         46   2D 00001450 ?getFunc@pvCallback@@QAEP6AXPAXW4pvType@@IPATpvValue@@0W4pvStat@@@ZXZ
         47   2E 000012E0 ?getFunc@pvVariable@@QBEP6AXPAXH@ZXZ
         48   2F 00001600 ?getMagic@pvCallback@@QAEHXZ
         49   30 00001420 ?getMagic@pvSystem@@QBEHXZ
         50   31 00001420 ?getMagic@pvVariable@@QBEHXZ
         51   32 00001310 ?getMess@pvSystem@@QBEPBDXZ
         52   33 000014C0 ?getMess@pvVariable@@QBEPBDXZ
         53   34 00001450 ?getName@pvVariable@@QBEPADXZ
         54   35 00001480 ?getPrivate@pvCallback@@QAEPAXXZ
         55   36 00001470 ?getPrivate@pvVariable@@QBEPAXXZ
         56   37 00001440 ?getSevr@pvSystem@@QBE?AW4pvSevr@@XZ
         57   38 00001490 ?getSevr@pvVariable@@QBE?AW4pvSevr@@XZ
         58   39 00001450 ?getStat@pvSystem@@QBE?AW4pvStat@@XZ
         59   3A 000014A0 ?getStat@pvVariable@@QBE?AW4pvStat@@XZ
         60   3B 000012E0 ?getStatus@pvSystem@@QBEHXZ
         61   3C 00001480 ?getStatus@pvVariable@@QBEHXZ
         62   3D 000012B0 ?getSystem@pvSystem@@QAEPAV1@XZ
         63   3E 00001440 ?getSystem@pvVariable@@QBEPAVpvSystem@@XZ
         64   3F 000012E0 ?getType@pvCallback@@QAE?AW4pvType@@XZ
         65   40 000012D0 ?getVariable@pvCallback@@QAEPAVpvVariable@@XZ
         66   41 00001600 ?pInstance@SingletonUntyped@@QBEPAXXZ
         67   42 00001620 ?setDebug@pvCallback@@QAEXH@Z
         68   43 00001430 ?setDebug@pvSystem@@QAEXH@Z
         69   44 00001430 ?setDebug@pvVariable@@QAEXH@Z
         70   45 00004110 ?setError@pvSystem@@QAEXHW4pvSevr@@W4pvStat@@PBD@Z
         71   46 000040F0 ?setError@pvVariable@@QAEXHW4pvSevr@@W4pvStat@@PBD@Z
         72   47 00001630 ?setPrivate@pvCallback@@QAEXPAX@Z
         73   48 00001460 ?setPrivate@pvVariable@@QAEXPAX@Z
         74   49 00001300 ?setStat@pvSystem@@QAEXW4pvStat@@@Z
         75   4A 000014B0 ?setStat@pvVariable@@QAEXW4pvStat@@@Z
         76   4B 000012F0 ?setStatus@pvSystem@@QAEXH@Z
         77   4C 00001630 ?setStatus@pvVariable@@QAEXH@Z
         78   4D 000048F0 _newPvSystem@8
         79   4E 00004660 _pvSysAttach@4
         80   4F 00004860 _pvSysCreate@12
         81   50 00004690 _pvSysDestroy@4
         82   51 00004630 _pvSysFlush@4
         83   52 000045B0 _pvSysGetDebug@4
         84   53 000045E0 _pvSysGetMagic@4
         85   54 00004520 _pvSysGetMess@4
         86   55 00004570 _pvSysGetSevr@4
         87   56 00004550 _pvSysGetStat@4
         88   57 00004590 _pvSysGetStatus@4
         89   58 00004600 _pvSysPend@16
         90   59 000045D0 _pvSysSetDebug@8
         91   5A 00004090 _pvTimeGetCurrentDouble@4
         92   5B 000044D0 _pvVarCreate@24
         93   5C 000044A0 _pvVarDestroy@4
         94   5D 00004470 _pvVarGet@16
         95   5E 00004400 _pvVarGetCallback@20
         96   5F 00004270 _pvVarGetConnected@4
         97   60 00004210 _pvVarGetCount@4
         98   61 000042A0 _pvVarGetDebug@4
         99   62 000042D0 _pvVarGetMagic@4
        100   63 00004130 _pvVarGetMess@4
        101   64 000041E0 _pvVarGetName@4
        102   65 00004440 _pvVarGetNoBlock@16
        103   66 000041C0 _pvVarGetPrivate@4
        104   67 00004180 _pvVarGetSevr@4
        105   68 00004160 _pvVarGetStat@4
        106   69 000041A0 _pvVarGetStatus@4
        107   6A 00004240 _pvVarGetType@4
        108   6B 000042F0 _pvVarMonitorOff@8
        109   6C 00004320 _pvVarMonitorOn@24
        110   6D 000043D0 _pvVarPut@16
        111   6E 00004360 _pvVarPutCallback@24
        112   6F 000043A0 _pvVarPutNoBlock@16
        113   70 000042C0 _pvVarSetDebug@8
        114   71 00004200 _pvVarSetPrivate@8
        115   72 000055AC pv_severity_offsets
        116   73 00005504 pv_sizes
        117   74 000055C4 pv_stamp_offsets
        118   75 00005594 pv_status_offsets
        119   76 00005564 pv_value_offsets
        120   77 00005534 pv_value_sizes

  Summary

        1000 .data
        3000 .rdata
        1000 .reloc
        4000 .text

V:\seq\head>

References:
Sequencer build errors on Windows Josh Stein
Re: Sequencer build errors on Windows Benjamin Franksen
RE: Sequencer build errors on Windows Mark Rivers

Navigate by Date:
Prev: [Eclipse] EPICS IDE plugin Pavel Masloff
Next: Re: CSS Export Waveform data John Dobbins
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  <20112012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: RE: Sequencer build errors on Windows Mark Rivers
Next: RE: Sequencer build errors on Windows Mark Rivers
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  <20112012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 18 Nov 2013 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·