diff --git a/pvAccessApp/ca/caChannel.cpp b/pvAccessApp/ca/caChannel.cpp index 60b10ce..5260ac3 100644 --- a/pvAccessApp/ca/caChannel.cpp +++ b/pvAccessApp/ca/caChannel.cpp @@ -5,9 +5,10 @@ */ #include -#include #include +#include + using namespace epics::pvData; using namespace epics::pvAccess; using namespace epics::pvAccess::ca; diff --git a/pvAccessApp/ca/caProvider.cpp b/pvAccessApp/ca/caProvider.cpp index 5bef77b..3b4e9f1 100644 --- a/pvAccessApp/ca/caProvider.cpp +++ b/pvAccessApp/ca/caProvider.cpp @@ -4,16 +4,19 @@ * in file LICENSE that is included with this distribution. */ -#include -#include -#include - #include /* for CA */ #include #include +#include + +#define epicsExportSharedSymbols + +#include +#include + using namespace epics::pvData; using namespace epics::pvAccess; using namespace epics::pvAccess::ca; diff --git a/pvAccessApp/ca/caProvider.h b/pvAccessApp/ca/caProvider.h index 80b5b2c..5eb904c 100644 --- a/pvAccessApp/ca/caProvider.h +++ b/pvAccessApp/ca/caProvider.h @@ -10,11 +10,13 @@ #include #include +#include + namespace epics { namespace pvAccess { namespace ca { -class CAChannelProvider : +class epicsShareClass CAChannelProvider : public ChannelProvider, public std::tr1::enable_shared_from_this { @@ -68,7 +70,7 @@ private: }; -class CAClientFactory +class epicsShareClass CAClientFactory { public: static void start(); diff --git a/pvAccessApp/client/pvAccess.cpp b/pvAccessApp/client/pvAccess.cpp index d5b79fc..df74e7c 100644 --- a/pvAccessApp/client/pvAccess.cpp +++ b/pvAccessApp/client/pvAccess.cpp @@ -4,6 +4,7 @@ * in file LICENSE that is included with this distribution. */ +#define epicsExportSharedSymbols #include namespace epics { diff --git a/pvAccessApp/client/pvAccess.h b/pvAccessApp/client/pvAccess.h index fa9d247..bb47b3a 100644 --- a/pvAccessApp/client/pvAccess.h +++ b/pvAccessApp/client/pvAccess.h @@ -6,14 +6,29 @@ #ifndef PVACCESS_H #define PVACCESS_H + +#include + +#ifdef epicsExportSharedSymbols +# define pvAccessEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include #include #include #include -#include -#include #include +#ifdef pvAccessEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef pvAccessEpicsExportSharedSymbols +#endif + +#include + +#include + namespace epics { namespace pvAccess { @@ -38,7 +53,7 @@ namespace pvAccess { /** * */ - class Lockable + class epicsShareClass Lockable { public: POINTER_DEFINITIONS(Lockable); @@ -52,7 +67,7 @@ namespace pvAccess { /** * Scope lock. */ - class ScopedLock : private epics::pvData::NoDefaultMethods { + class epicsShareClass ScopedLock : private epics::pvData::NoDefaultMethods { public: explicit ScopedLock(Lockable::shared_pointer const & li) @@ -95,7 +110,7 @@ namespace pvAccess { /** * Base interface for all channel requests. */ - class ChannelRequest : public epics::pvData::Destroyable, public Lockable, private epics::pvData::NoDefaultMethods { + class epicsShareClass ChannelRequest : public epics::pvData::Destroyable, public Lockable, private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ChannelRequest); }; @@ -104,7 +119,7 @@ namespace pvAccess { * Request to put and get Array Data. * The data is either taken from or put in the PVArray returned by ChannelArrayRequester.channelArrayConnect. */ - class ChannelArray : public ChannelRequest{ + class epicsShareClass ChannelArray : public ChannelRequest{ public: POINTER_DEFINITIONS(ChannelArray); @@ -136,7 +151,7 @@ namespace pvAccess { /** * The epics::pvData::Requester for a ChannelArray. */ - class ChannelArrayRequester : virtual public epics::pvData::Requester { + class epicsShareClass ChannelArrayRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelArrayRequester); @@ -174,7 +189,7 @@ namespace pvAccess { /** * */ - class ChannelFind : public epics::pvData::Destroyable, private epics::pvData::NoDefaultMethods { + class epicsShareClass ChannelFind : public epics::pvData::Destroyable, private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ChannelFind); @@ -185,7 +200,7 @@ namespace pvAccess { /** * */ - class ChannelFindRequester { + class epicsShareClass ChannelFindRequester { public: POINTER_DEFINITIONS(ChannelFindRequester); @@ -200,7 +215,7 @@ namespace pvAccess { /** * Request to get data from a channel. */ - class ChannelGet : public ChannelRequest { + class epicsShareClass ChannelGet : public ChannelRequest { public: POINTER_DEFINITIONS(ChannelGet); @@ -217,7 +232,7 @@ namespace pvAccess { /** * epics::pvData::Requester for channelGet. */ - class ChannelGetRequester : virtual public epics::pvData::Requester { + class epicsShareClass ChannelGetRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelGetRequester); @@ -242,7 +257,7 @@ namespace pvAccess { /** * ChannelProcess - request that a channel be processed.. */ - class ChannelProcess : public ChannelRequest { + class epicsShareClass ChannelProcess : public ChannelRequest { public: POINTER_DEFINITIONS(ChannelProcess); @@ -259,7 +274,7 @@ namespace pvAccess { /** * epics::pvData::Requester for channelProcess. */ - class ChannelProcessRequester : virtual public epics::pvData::Requester { + class epicsShareClass ChannelProcessRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelProcessRequester); @@ -282,7 +297,7 @@ namespace pvAccess { /** * Interface for a channel access put request. */ - class ChannelPut : public ChannelRequest { + class epicsShareClass ChannelPut : public ChannelRequest { public: POINTER_DEFINITIONS(ChannelPut); @@ -304,7 +319,7 @@ namespace pvAccess { /** * epics::pvData::Requester for ChannelPut. */ - class ChannelPutRequester : virtual public epics::pvData::Requester { + class epicsShareClass ChannelPutRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelPutRequester); @@ -336,7 +351,7 @@ namespace pvAccess { * Channel access put/get request. * The put is performed first, followed optionally by a process request, and then by a get request. */ - class ChannelPutGet : public ChannelRequest { + class epicsShareClass ChannelPutGet : public ChannelRequest { public: POINTER_DEFINITIONS(ChannelPutGet); @@ -363,7 +378,7 @@ namespace pvAccess { /** * epics::pvData::Requester for ChannelPutGet. */ - class ChannelPutGetRequester : virtual public epics::pvData::Requester + class epicsShareClass ChannelPutGetRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelPutGetRequester); @@ -400,7 +415,7 @@ namespace pvAccess { /** * epics::pvData::Requester for channelGet. */ - class ChannelRPC : public ChannelRequest { + class epicsShareClass ChannelRPC : public ChannelRequest { public: POINTER_DEFINITIONS(ChannelRPC); @@ -417,7 +432,7 @@ namespace pvAccess { /** * epics::pvData::Requester for channelGet. */ - class ChannelRPCRequester : virtual public epics::pvData::Requester { + class epicsShareClass ChannelRPCRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelRPCRequester); @@ -440,7 +455,7 @@ namespace pvAccess { /** * epics::pvData::Requester for a getStructure request. */ - class GetFieldRequester : virtual public epics::pvData::Requester { + class epicsShareClass GetFieldRequester : virtual public epics::pvData::Requester { public: POINTER_DEFINITIONS(GetFieldRequester); @@ -460,7 +475,7 @@ namespace pvAccess { * Interface for accessing a channel. * A channel is created via a call to ChannelAccess.createChannel(String channelName). */ - class Channel : + class epicsShareClass Channel : public epics::pvData::Requester, public epics::pvData::Destroyable, private epics::pvData::NoDefaultMethods { @@ -634,7 +649,7 @@ namespace pvAccess { /** * Listener for connect state changes. */ - class ChannelRequester : public virtual epics::pvData::Requester { + class epicsShareClass ChannelRequester : public virtual epics::pvData::Requester { public: POINTER_DEFINITIONS(ChannelRequester); @@ -664,7 +679,7 @@ namespace pvAccess { * Interface implemented by code that can provide access to the record * to which a channel connects. */ - class ChannelProvider : public epics::pvData::Destroyable, private epics::pvData::NoDefaultMethods { + class epicsShareClass ChannelProvider : public epics::pvData::Destroyable, private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ChannelProvider); @@ -726,7 +741,7 @@ namespace pvAccess { /** * ChanneProvider factory interface. */ - class ChannelProviderFactory : private epics::pvData::NoDefaultMethods { + class epicsShareClass ChannelProviderFactory : private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ChannelProviderFactory); @@ -754,7 +769,7 @@ namespace pvAccess { /** * Interface for locating channel providers. */ - class ChannelAccess : private epics::pvData::NoDefaultMethods { + class epicsShareClass ChannelAccess : private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ChannelAccess); @@ -783,9 +798,9 @@ namespace pvAccess { virtual std::auto_ptr getProviderNames() = 0; }; - extern ChannelAccess::shared_pointer getChannelAccess(); - extern void registerChannelProviderFactory(ChannelProviderFactory::shared_pointer const & channelProviderFactory); - extern void unregisterChannelProviderFactory(ChannelProviderFactory::shared_pointer const & channelProviderFactory); + epicsShareExtern ChannelAccess::shared_pointer getChannelAccess(); + epicsShareExtern void registerChannelProviderFactory(ChannelProviderFactory::shared_pointer const & channelProviderFactory); + epicsShareExtern void unregisterChannelProviderFactory(ChannelProviderFactory::shared_pointer const & channelProviderFactory); /** * Interface for creating request structure. diff --git a/pvAccessApp/factory/ChannelAccessFactory.cpp b/pvAccessApp/factory/ChannelAccessFactory.cpp index 2270493..5e11b71 100644 --- a/pvAccessApp/factory/ChannelAccessFactory.cpp +++ b/pvAccessApp/factory/ChannelAccessFactory.cpp @@ -4,14 +4,17 @@ * in file LICENSE that is included with this distribution. */ -#include -#include -#include -#include -#include #include #include +#include +#include +#include + +#define epicsExportSharedSymbols +#include +#include + using namespace epics::pvData; namespace epics { diff --git a/pvAccessApp/factory/CreateRequestFactory.cpp b/pvAccessApp/factory/CreateRequestFactory.cpp index cf8213d..00d75bb 100644 --- a/pvAccessApp/factory/CreateRequestFactory.cpp +++ b/pvAccessApp/factory/CreateRequestFactory.cpp @@ -6,15 +6,16 @@ #include #include + #include #include + +#define epicsExportSharedSymbols #include using namespace epics::pvData; using std::tr1::static_pointer_cast; - - namespace epics { namespace pvAccess { diff --git a/pvAccessApp/pva/clientFactory.cpp b/pvAccessApp/pva/clientFactory.cpp index 561a9fa..df886e1 100644 --- a/pvAccessApp/pva/clientFactory.cpp +++ b/pvAccessApp/pva/clientFactory.cpp @@ -4,14 +4,15 @@ * in file LICENSE that is included with this distribution. */ - -#include -#include #include #include #include +#define epicsExportSharedSymbols +#include +#include + using namespace epics::pvData; using namespace epics::pvAccess; diff --git a/pvAccessApp/pva/clientFactory.h b/pvAccessApp/pva/clientFactory.h index a36bc4b..788e38b 100644 --- a/pvAccessApp/pva/clientFactory.h +++ b/pvAccessApp/pva/clientFactory.h @@ -7,10 +7,12 @@ #ifndef CLIENTFACTORY_H #define CLIENTFACTORY_H +#include + namespace epics { namespace pvAccess { -class ClientFactory { +class epicsShareClass ClientFactory { public: static void start(); static void stop(); diff --git a/pvAccessApp/pva/pvaConstants.h b/pvAccessApp/pva/pvaConstants.h index 1dd07bf..3e623d8 100644 --- a/pvAccessApp/pva/pvaConstants.h +++ b/pvAccessApp/pva/pvaConstants.h @@ -7,8 +7,18 @@ #ifndef PVACONSTANTS_H_ #define PVACONSTANTS_H_ +#ifdef epicsExportSharedSymbols +# define pvaConstantsepicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include +#ifdef pvaConstantsepicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef pvaConstantsepicsExportSharedSymbols +#endif + namespace epics { namespace pvAccess { diff --git a/pvAccessApp/pva/pvaVersion.cpp b/pvAccessApp/pva/pvaVersion.cpp index 27eec47..81ebd9c 100644 --- a/pvAccessApp/pva/pvaVersion.cpp +++ b/pvAccessApp/pva/pvaVersion.cpp @@ -6,6 +6,7 @@ #include +#define epicsExportSharedSymbols #include using std::stringstream; diff --git a/pvAccessApp/pva/pvaVersion.h b/pvAccessApp/pva/pvaVersion.h index 20799f9..dd76ba9 100644 --- a/pvAccessApp/pva/pvaVersion.h +++ b/pvAccessApp/pva/pvaVersion.h @@ -7,9 +7,21 @@ #ifndef VERSION_H_ #define VERSION_H_ +#ifdef epicsExportSharedSymbols +# define pvaVersionEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include #include +#ifdef pvaVersionEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef pvaVersionEpicsExportSharedSymbols +#endif + +#include + // module version // TODO to be generated, etc. #define EPICS_PVA_MAJOR_VERSION 3 @@ -20,7 +32,7 @@ namespace epics { namespace pvAccess { - class Version : public epics::pvData::NoDefaultMethods { + class epicsShareClass Version : public epics::pvData::NoDefaultMethods { public: /** * Default constructor. @@ -104,7 +116,7 @@ namespace pvAccess { bool _developmentFlag; }; - std::ostream& operator<<(std::ostream& o, const Version& v); + epicsShareExtern std::ostream& operator<<(std::ostream& o, const Version& v); } } diff --git a/pvAccessApp/remote/blockingTCPTransport.cpp b/pvAccessApp/remote/blockingTCPTransport.cpp index 71308e6..7d6176d 100644 --- a/pvAccessApp/remote/blockingTCPTransport.cpp +++ b/pvAccessApp/remote/blockingTCPTransport.cpp @@ -533,7 +533,7 @@ namespace pvAccess { _socketBuffer->align(alignment); } - bool BlockingTCPTransport::directSerialize(ByteBuffer */*existingBuffer*/, const char* toSerialize, + bool BlockingTCPTransport::directSerialize(ByteBuffer* /*existingBuffer*/, const char* toSerialize, std::size_t elementCount, std::size_t elementSize) { // TODO overflow check, size_t type, other is int32 for payloadSize header field !!! diff --git a/pvAccessApp/remote/blockingUDP.h b/pvAccessApp/remote/blockingUDP.h index e3cac85..1947c68 100644 --- a/pvAccessApp/remote/blockingUDP.h +++ b/pvAccessApp/remote/blockingUDP.h @@ -133,13 +133,13 @@ namespace epics { _receiveBuffer->align(alignment); } - virtual bool directSerialize(epics::pvData::ByteBuffer */*existingBuffer*/, const char* /*toSerialize*/, + virtual bool directSerialize(epics::pvData::ByteBuffer* /*existingBuffer*/, const char* /*toSerialize*/, std::size_t /*elementCount*/, std::size_t /*elementSize*/) { return false; } - virtual bool directDeserialize(epics::pvData::ByteBuffer */*existingBuffer*/, char* /*deserializeTo*/, + virtual bool directDeserialize(epics::pvData::ByteBuffer* /*existingBuffer*/, char* /*deserializeTo*/, std::size_t /*elementCount*/, std::size_t /*elementSize*/) { return false; diff --git a/pvAccessApp/remote/simpleChannelSearchManagerImpl.h b/pvAccessApp/remote/simpleChannelSearchManagerImpl.h index aaced5a..141af8f 100644 --- a/pvAccessApp/remote/simpleChannelSearchManagerImpl.h +++ b/pvAccessApp/remote/simpleChannelSearchManagerImpl.h @@ -32,7 +32,7 @@ public: // no cache field->serialize(buffer, this); } - virtual bool directSerialize(epics::pvData::ByteBuffer */*existingBuffer*/, const char* /*toSerialize*/, + virtual bool directSerialize(epics::pvData::ByteBuffer* /*existingBuffer*/, const char* /*toSerialize*/, std::size_t /*elementCount*/, std::size_t /*elementSize*/) { return false; diff --git a/pvAccessApp/remoteClient/clientContextImpl.h b/pvAccessApp/remoteClient/clientContextImpl.h index 2a127d1..9eea824 100644 --- a/pvAccessApp/remoteClient/clientContextImpl.h +++ b/pvAccessApp/remoteClient/clientContextImpl.h @@ -13,6 +13,8 @@ #include #include +#include + class ChannelSearchManager; namespace epics { @@ -115,7 +117,7 @@ namespace epics { virtual void poll() = 0; }; - extern ClientContextImpl::shared_pointer createClientContextImpl(); + epicsShareExtern ClientContextImpl::shared_pointer createClientContextImpl(); } } diff --git a/pvAccessApp/rpcClient/rpcClient.cpp b/pvAccessApp/rpcClient/rpcClient.cpp index 17ad7e2..32f6bf3 100644 --- a/pvAccessApp/rpcClient/rpcClient.cpp +++ b/pvAccessApp/rpcClient/rpcClient.cpp @@ -9,10 +9,11 @@ #include #include +#include +#define epicsExportSharedSymbols #include #include -#include #include #include diff --git a/pvAccessApp/rpcClient/rpcClient.h b/pvAccessApp/rpcClient/rpcClient.h index 0c9cfce..ce80c68 100644 --- a/pvAccessApp/rpcClient/rpcClient.h +++ b/pvAccessApp/rpcClient/rpcClient.h @@ -9,8 +9,17 @@ #include +#ifdef epicsExportSharedSymbols +# define rpcClientEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif #include +#ifdef rpcClientEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef rpcClientEpicsExportSharedSymbols +#endif +#include namespace epics { @@ -21,7 +30,7 @@ namespace pvAccess * RPCClient is an interface class that is used by a service client. * */ - class RPCClient + class epicsShareClass RPCClient { public: POINTER_DEFINITIONS(RPCClient); diff --git a/pvAccessApp/rpcService/rpcServer.cpp b/pvAccessApp/rpcService/rpcServer.cpp index cd5f2f8..7f2299b 100644 --- a/pvAccessApp/rpcService/rpcServer.cpp +++ b/pvAccessApp/rpcService/rpcServer.cpp @@ -5,11 +5,12 @@ */ #include + +#define epicsExportSharedSymbols #include using namespace epics::pvData; - namespace epics { namespace pvAccess { diff --git a/pvAccessApp/rpcService/rpcServer.h b/pvAccessApp/rpcService/rpcServer.h index c208b3d..53f97b2 100644 --- a/pvAccessApp/rpcService/rpcServer.h +++ b/pvAccessApp/rpcService/rpcServer.h @@ -7,15 +7,27 @@ #ifndef RPCSERVER_H #define RPCSERVER_H -#include -#include +#ifdef epicsExportSharedSymbols +# define rpcServerEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif +#include + +#ifdef rpcServerEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef rpcServerEpicsExportSharedSymbols +#endif + +#include #include #include +#include + namespace epics { namespace pvAccess { -class RPCServer { +class epicsShareClass RPCServer { private: ServerContextImpl::shared_pointer m_serverContext; diff --git a/pvAccessApp/rpcService/rpcService.h b/pvAccessApp/rpcService/rpcService.h index 06a9b72..ceae176 100644 --- a/pvAccessApp/rpcService/rpcService.h +++ b/pvAccessApp/rpcService/rpcService.h @@ -8,13 +8,27 @@ #define RPCSERVICE_H #include + +#ifdef epicsExportSharedSymbols +# define rpcServiceEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include -#include #include +#ifdef rpcServiceEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef rpcServiceEpicsExportSharedSymbols +#endif + +#include + +#include + namespace epics { namespace pvAccess { -class RPCRequestException : public std::runtime_error { +class epicsShareClass RPCRequestException : public std::runtime_error { public: RPCRequestException(epics::pvData::Status::StatusType status, epics::pvData::String const & message) : @@ -31,7 +45,7 @@ private: }; -class RPCService { +class epicsShareClass RPCService { public: POINTER_DEFINITIONS(RPCService);