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
<2011>
2012
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
<2011>
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|