[mingw-qpid-cpp: 11/28] Rebase package to Qpid 0.10
Kalev Lember
kalev at fedoraproject.org
Wed Mar 7 17:17:44 UTC 2012
commit 4c00fb50cc505ad36da2b446ca43dedeef1b3dcf
Author: Ted Ross <tross at redhat.com>
Date: Fri Apr 29 12:03:52 2011 -0400
Rebase package to Qpid 0.10
.gitignore | 1 +
QPID-3159.patch | 16 +
mingw32-qpid-cpp.spec | 18 +-
qpid-mingw32.patch | 2778 +++++++++++++++++++++++++++++++++++++++++++++++++
sources | 2 +-
5 files changed, 2807 insertions(+), 8 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index fcf4974..55f7d9c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/qpid-0.8.tar.gz
+/qpid-0.10.tar.gz
diff --git a/QPID-3159.patch b/QPID-3159.patch
new file mode 100644
index 0000000..96334e6
--- /dev/null
+++ b/QPID-3159.patch
@@ -0,0 +1,16 @@
+diff --git a/qpid/cpp/managementgen/qmfgen/schema.py b/qpid/cpp/managementgen/qmfgen/schema.py
+index afdfe42..59e951f 100755
+--- a/qpid/cpp/managementgen/qmfgen/schema.py
++++ b/qpid/cpp/managementgen/qmfgen/schema.py
+@@ -1731,9 +1731,9 @@ class SchemaPackage:
+ stream.write(" qmf::SchemaProperty arg(\"%s\", %s);\n" % (arg.name, typeName))
+ if subType:
+ stream.write(" arg.setSubtype(\"%s\");\n" % subType)
+- if stat.unit:
++ if arg.unit:
+ stream.write(" arg.setUnit(\"%s\");\n" % arg.unit)
+- if stat.desc:
++ if arg.desc:
+ stream.write(" arg.setDesc(\"%s\");\n" % arg.desc)
+ stream.write(" arg.setDirection(%s);\n" % self.qmfv2Dir(arg.dir))
+ stream.write(" method.addArgument(arg);\n")
diff --git a/mingw32-qpid-cpp.spec b/mingw32-qpid-cpp.spec
index 0148111..40fefea 100644
--- a/mingw32-qpid-cpp.spec
+++ b/mingw32-qpid-cpp.spec
@@ -6,18 +6,18 @@
%define __debug_install_post %{_mingw32_debug_install_post}
Name: mingw32-qpid-cpp
-Version: 0.8
-Release: 0.6%{?dist}
+Version: 0.10
+Release: 1%{?dist}
Summary: MinGW Windows port of AMQP C++ Daemons and Libraries
Group: Development/Libraries
License: ASL 2.0
URL: http://qpid.apache.org
-Source0: http://people.apache.org/~robbie/qpid/%{version}/RC3/qpid-%{version}.tar.gz
+Source0: http://www.apache.org/dist/qpid/0.10/qpid-0.10.tar.gz
-Patch6: qpid-mingw.patch
-Patch7: qpid-fedora-patch.patch
+Patch0: QPID-3159.patch
+Patch1: qpid-mingw32.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -37,8 +37,8 @@ an AMQP message broker using the AMQP protocol.
%prep
%setup -q -n qpid-%{version}
-%patch6 -p0
-%patch7 -p0
+%patch0 -p2
+%patch1 -p2
%build
%{__mkdir_p} build
@@ -79,12 +79,16 @@ rm -rf $RPM_BUILD_ROOT
%{_mingw32_prefix}/plugins
%{_mingw32_prefix}/managementgen
%{_mingw32_includedir}/qpid
+%{_mingw32_includedir}/qmf
%{_mingw32_bindir}/qpidd.exe
%{_mingw32_bindir}/*.dll
%{_mingw32_bindir}/lib*.dll.a
%doc cpp/RELEASE_NOTES
%changelog
+* Fri Apr 29 2011 Ted Ross <tross at apache.org> - 0.10-0.1
+- Rebased to Qpid 0.10
+
* Mon Feb 21 2011 Ted Ross <tross at apache.org> - 0.8-0.6
- Added QMF2 patch from the native qpid-cpp package.
diff --git a/qpid-mingw32.patch b/qpid-mingw32.patch
new file mode 100644
index 0000000..fb977d0
--- /dev/null
+++ b/qpid-mingw32.patch
@@ -0,0 +1,2778 @@
+diff --git a/qpid/cpp/include/qmf/Agent.h b/qpid/cpp/include/qmf/Agent.h
+index 8c0f48b..94083be 100644
+--- a/qpid/cpp/include/qmf/Agent.h
++++ b/qpid/cpp/include/qmf/Agent.h
+@@ -42,7 +42,7 @@ namespace qmf {
+ class SchemaId;
+ class Schema;
+
+- class Agent : public qmf::Handle<AgentImpl> {
++ class QMF_CLASS_EXTERN Agent : public qmf::Handle<AgentImpl> {
+ public:
+ QMF_EXTERN Agent(AgentImpl* impl = 0);
+ QMF_EXTERN Agent(const Agent&);
+diff --git a/qpid/cpp/include/qmf/AgentEvent.h b/qpid/cpp/include/qmf/AgentEvent.h
+index 59a41c3..0f93a9b 100644
+--- a/qpid/cpp/include/qmf/AgentEvent.h
++++ b/qpid/cpp/include/qmf/AgentEvent.h
+@@ -46,7 +46,7 @@ namespace qmf {
+ AGENT_THREAD_FAILED = 8
+ };
+
+- class AgentEvent : public qmf::Handle<AgentEventImpl> {
++ class QMF_CLASS_EXTERN AgentEvent : public qmf::Handle<AgentEventImpl> {
+ public:
+ QMF_EXTERN AgentEvent(AgentEventImpl* impl = 0);
+ QMF_EXTERN AgentEvent(const AgentEvent&);
+diff --git a/qpid/cpp/include/qmf/AgentSession.h b/qpid/cpp/include/qmf/AgentSession.h
+index 39d921a..1eeb252 100644
+--- a/qpid/cpp/include/qmf/AgentSession.h
++++ b/qpid/cpp/include/qmf/AgentSession.h
+@@ -40,7 +40,7 @@ namespace qmf {
+ class Data;
+ class DataAddr;
+
+- class AgentSession : public qmf::Handle<AgentSessionImpl> {
++ class QMF_CLASS_EXTERN AgentSession : public qmf::Handle<AgentSessionImpl> {
+ public:
+ QMF_EXTERN AgentSession(AgentSessionImpl* impl = 0);
+ QMF_EXTERN AgentSession(const AgentSession&);
+diff --git a/qpid/cpp/include/qmf/ConsoleEvent.h b/qpid/cpp/include/qmf/ConsoleEvent.h
+index b836b62..94600f9 100644
+--- a/qpid/cpp/include/qmf/ConsoleEvent.h
++++ b/qpid/cpp/include/qmf/ConsoleEvent.h
+@@ -57,7 +57,7 @@ namespace qmf {
+ AGENT_DEL_FILTER = 2
+ };
+
+- class ConsoleEvent : public qmf::Handle<ConsoleEventImpl> {
++ class QMF_CLASS_EXTERN ConsoleEvent : public qmf::Handle<ConsoleEventImpl> {
+ public:
+ QMF_EXTERN ConsoleEvent(ConsoleEventImpl* impl = 0);
+ QMF_EXTERN ConsoleEvent(const ConsoleEvent&);
+diff --git a/qpid/cpp/include/qmf/ConsoleSession.h b/qpid/cpp/include/qmf/ConsoleSession.h
+index 896f8ff..6008036 100644
+--- a/qpid/cpp/include/qmf/ConsoleSession.h
++++ b/qpid/cpp/include/qmf/ConsoleSession.h
+@@ -38,7 +38,7 @@ namespace qmf {
+ class ConsoleSessionImpl;
+ class ConsoleEvent;
+
+- class ConsoleSession : public qmf::Handle<ConsoleSessionImpl> {
++ class QMF_CLASS_EXTERN ConsoleSession : public qmf::Handle<ConsoleSessionImpl> {
+ public:
+ QMF_EXTERN ConsoleSession(ConsoleSessionImpl* impl = 0);
+ QMF_EXTERN ConsoleSession(const ConsoleSession&);
+diff --git a/qpid/cpp/include/qmf/Data.h b/qpid/cpp/include/qmf/Data.h
+index 82f1569..487a02f 100644
+--- a/qpid/cpp/include/qmf/Data.h
++++ b/qpid/cpp/include/qmf/Data.h
+@@ -39,7 +39,7 @@ namespace qmf {
+ class DataAddr;
+ class Agent;
+
+- class Data : public qmf::Handle<DataImpl> {
++ class QMF_CLASS_EXTERN Data : public qmf::Handle<DataImpl> {
+ public:
+ QMF_EXTERN Data(DataImpl* impl = 0);
+ QMF_EXTERN Data(const Data&);
+diff --git a/qpid/cpp/include/qmf/DataAddr.h b/qpid/cpp/include/qmf/DataAddr.h
+index 72de0c9..63d309c 100644
+--- a/qpid/cpp/include/qmf/DataAddr.h
++++ b/qpid/cpp/include/qmf/DataAddr.h
+@@ -34,7 +34,7 @@ namespace qmf {
+
+ class DataAddrImpl;
+
+- class DataAddr : public qmf::Handle<DataAddrImpl> {
++ class QMF_CLASS_EXTERN DataAddr : public qmf::Handle<DataAddrImpl> {
+ public:
+ QMF_EXTERN DataAddr(DataAddrImpl* impl = 0);
+ QMF_EXTERN DataAddr(const DataAddr&);
+diff --git a/qpid/cpp/include/qmf/Handle.h b/qpid/cpp/include/qmf/Handle.h
+index 510e299..50971ea 100644
+--- a/qpid/cpp/include/qmf/Handle.h
++++ b/qpid/cpp/include/qmf/Handle.h
+@@ -39,22 +39,22 @@ template <class T> class Handle {
+ public:
+
+ /**@return true if handle is valid, i.e. not null. */
+- QMF_EXTERN bool isValid() const { return impl; }
++ QMF_INLINE_EXTERN bool isValid() const { return impl; }
+
+ /**@return true if handle is null. It is an error to call any function on a null handle. */
+- QMF_EXTERN bool isNull() const { return !impl; }
++ QMF_INLINE_EXTERN bool isNull() const { return !impl; }
+
+ /** Conversion to bool supports idiom if (handle) { handle->... } */
+- QMF_EXTERN operator bool() const { return impl; }
++ QMF_INLINE_EXTERN operator bool() const { return impl; }
+
+ /** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
+- QMF_EXTERN bool operator !() const { return !impl; }
++ QMF_INLINE_EXTERN bool operator !() const { return !impl; }
+
+ void swap(Handle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
+
+ protected:
+ typedef T Impl;
+- QMF_EXTERN Handle() :impl() {}
++ QMF_INLINE_EXTERN Handle() :impl() {}
+
+ // Not implemented,subclasses must implement.
+ QMF_EXTERN Handle(const Handle&);
+diff --git a/qpid/cpp/include/qmf/ImportExport.h b/qpid/cpp/include/qmf/ImportExport.h
+index f5e1d91..1f7a6d1 100644
+--- a/qpid/cpp/include/qmf/ImportExport.h
++++ b/qpid/cpp/include/qmf/ImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-# if defined(QMF_EXPORT) || defined (qmfcommon_EXPORTS)
++# if defined(QMF_EXPORT) || defined (qmf2_EXPORTS)
+ # define QMF_EXTERN __declspec(dllexport)
+ # else
+ # define QMF_EXTERN __declspec(dllimport)
+ # endif
++# ifdef _MSC_VER
++# define QMF_CLASS_EXTERN
++# define QMF_INLINE_EXTERN QMF_EXTERN
++# else
++# define QMF_CLASS_EXTERN QMF_EXTERN
++# define QMF_INLINE_EXTERN
++# endif
+ #else
+ # define QMF_EXTERN
++# define QMF_CLASS_EXTERN
++# define QMF_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/include/qmf/Query.h b/qpid/cpp/include/qmf/Query.h
+index fec4660..c292e46 100644
+--- a/qpid/cpp/include/qmf/Query.h
++++ b/qpid/cpp/include/qmf/Query.h
+@@ -43,7 +43,7 @@ namespace qmf {
+ QUERY_SCHEMA_ID = 4
+ };
+
+- class Query : public qmf::Handle<QueryImpl> {
++ class QMF_CLASS_EXTERN Query : public qmf::Handle<QueryImpl> {
+ public:
+ QMF_EXTERN Query(QueryImpl* impl = 0);
+ QMF_EXTERN Query(const Query&);
+diff --git a/qpid/cpp/include/qmf/Schema.h b/qpid/cpp/include/qmf/Schema.h
+index cf31613..6cfd2e2 100644
+--- a/qpid/cpp/include/qmf/Schema.h
++++ b/qpid/cpp/include/qmf/Schema.h
+@@ -38,7 +38,7 @@ namespace qmf {
+ class SchemaProperty;
+ class SchemaMethod;
+
+- class Schema : public qmf::Handle<SchemaImpl> {
++ class QMF_CLASS_EXTERN Schema : public qmf::Handle<SchemaImpl> {
+ public:
+ QMF_EXTERN Schema(SchemaImpl* impl = 0);
+ QMF_EXTERN Schema(const Schema&);
+diff --git a/qpid/cpp/include/qmf/SchemaId.h b/qpid/cpp/include/qmf/SchemaId.h
+index 13fb1cb..2dafc1c 100644
+--- a/qpid/cpp/include/qmf/SchemaId.h
++++ b/qpid/cpp/include/qmf/SchemaId.h
+@@ -35,7 +35,7 @@ namespace qmf {
+
+ class SchemaIdImpl;
+
+- class SchemaId : public qmf::Handle<SchemaIdImpl> {
++ class QMF_CLASS_EXTERN SchemaId : public qmf::Handle<SchemaIdImpl> {
+ public:
+ QMF_EXTERN SchemaId(SchemaIdImpl* impl = 0);
+ QMF_EXTERN SchemaId(const SchemaId&);
+diff --git a/qpid/cpp/include/qmf/SchemaMethod.h b/qpid/cpp/include/qmf/SchemaMethod.h
+index 47302b6..b5944dc 100644
+--- a/qpid/cpp/include/qmf/SchemaMethod.h
++++ b/qpid/cpp/include/qmf/SchemaMethod.h
+@@ -36,7 +36,7 @@ namespace qmf {
+ class SchemaMethodImpl;
+ class SchemaProperty;
+
+- class SchemaMethod : public qmf::Handle<SchemaMethodImpl> {
++ class QMF_CLASS_EXTERN SchemaMethod : public qmf::Handle<SchemaMethodImpl> {
+ public:
+ QMF_EXTERN SchemaMethod(SchemaMethodImpl* impl = 0);
+ QMF_EXTERN SchemaMethod(const SchemaMethod&);
+diff --git a/qpid/cpp/include/qmf/SchemaProperty.h b/qpid/cpp/include/qmf/SchemaProperty.h
+index a3a328b..bbb603f 100644
+--- a/qpid/cpp/include/qmf/SchemaProperty.h
++++ b/qpid/cpp/include/qmf/SchemaProperty.h
+@@ -36,7 +36,7 @@ namespace qmf {
+
+ class SchemaPropertyImpl;
+
+- class SchemaProperty : public Handle<SchemaPropertyImpl> {
++ class QMF_CLASS_EXTERN SchemaProperty : public Handle<SchemaPropertyImpl> {
+ public:
+ QMF_EXTERN SchemaProperty(SchemaPropertyImpl* impl = 0);
+ QMF_EXTERN SchemaProperty(const SchemaProperty&);
+diff --git a/qpid/cpp/include/qmf/Subscription.h b/qpid/cpp/include/qmf/Subscription.h
+index 4e60eb9..30bf2ed 100644
+--- a/qpid/cpp/include/qmf/Subscription.h
++++ b/qpid/cpp/include/qmf/Subscription.h
+@@ -35,7 +35,7 @@ namespace qmf {
+ class SubscriptionImpl;
+ class Data;
+
+- class Subscription : public qmf::Handle<SubscriptionImpl> {
++ class QMF_CLASS_EXTERN Subscription : public qmf::Handle<SubscriptionImpl> {
+ public:
+ QMF_EXTERN Subscription(SubscriptionImpl* impl = 0);
+ QMF_EXTERN Subscription(const Subscription&);
+diff --git a/qpid/cpp/include/qmf/engine/QmfEngineImportExport.h b/qpid/cpp/include/qmf/engine/QmfEngineImportExport.h
+index 373617e..cf8fffd 100644
+--- a/qpid/cpp/include/qmf/engine/QmfEngineImportExport.h
++++ b/qpid/cpp/include/qmf/engine/QmfEngineImportExport.h
+@@ -26,8 +26,17 @@
+ # else
+ # define QMFE_EXTERN __declspec(dllimport)
+ # endif
++# ifdef _MSC_VER
++# define QMFE_CLASS_EXTERN
++# define QMFE_INLINE_EXTERN QMFE_EXTERN
++# else
++# define QMFE_CLASS_EXTERN QMFE_EXTERN
++# define QMFE_INLINE_EXTERN
++# endif
+ #else
+ # define QMFE_EXTERN
++# define QMFE_CLASS_EXTERN
++# define QMFE_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/include/qmf/exceptions.h b/qpid/cpp/include/qmf/exceptions.h
+index 7959499..c7ffa68 100644
+--- a/qpid/cpp/include/qmf/exceptions.h
++++ b/qpid/cpp/include/qmf/exceptions.h
+@@ -31,24 +31,24 @@ namespace qmf {
+ /** \ingroup qmf
+ */
+
+- struct QmfException : public qpid::types::Exception {
++ struct QMF_CLASS_EXTERN QmfException : public qpid::types::Exception {
+ QMF_EXTERN QmfException(const std::string& msg);
+ QMF_EXTERN virtual ~QmfException() throw();
+
+ qpid::types::Variant::Map detail;
+ };
+
+- struct KeyNotFound : public QmfException {
++ struct QMF_CLASS_EXTERN KeyNotFound : public QmfException {
+ QMF_EXTERN KeyNotFound(const std::string& msg);
+ QMF_EXTERN virtual ~KeyNotFound() throw();
+ };
+
+- struct IndexOutOfRange : public QmfException {
++ struct QMF_CLASS_EXTERN IndexOutOfRange : public QmfException {
+ QMF_EXTERN IndexOutOfRange();
+ QMF_EXTERN virtual ~IndexOutOfRange() throw();
+ };
+
+- struct OperationTimedOut : public QmfException {
++ struct QMF_CLASS_EXTERN OperationTimedOut : public QmfException {
+ QMF_EXTERN OperationTimedOut();
+ QMF_EXTERN virtual ~OperationTimedOut() throw();
+ };
+diff --git a/qpid/cpp/include/qpid/Address.h b/qpid/cpp/include/qpid/Address.h
+index 57c9139..f5b19d0 100755
+--- a/qpid/cpp/include/qpid/Address.h
++++ b/qpid/cpp/include/qpid/Address.h
+@@ -36,7 +36,7 @@ public:
+ static const std::string TCP; // Default TCP protocol tag.
+ static const uint16_t AMQP_PORT=5672; // Default AMQP port.
+
+- QPID_COMMON_EXTERN explicit Address(
++ QPID_COMMON_INLINE_EXTERN explicit Address(
+ const std::string& protocol_=std::string(),
+ const std::string& host_=std::string(),
+ uint16_t port_=0
+diff --git a/qpid/cpp/include/qpid/CommonImportExport.h b/qpid/cpp/include/qpid/CommonImportExport.h
+index 02c06ed..c405e88 100644
+--- a/qpid/cpp/include/qpid/CommonImportExport.h
++++ b/qpid/cpp/include/qpid/CommonImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-#if defined(COMMON_EXPORT) || defined (qpidcommon_EXPORTS)
+-#define QPID_COMMON_EXTERN __declspec(dllexport)
++# if defined(COMMON_EXPORT) || defined (qpidcommon_EXPORTS)
++# define QPID_COMMON_EXTERN __declspec(dllexport)
++# else
++# define QPID_COMMON_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QPID_COMMON_CLASS_EXTERN
++# define QPID_COMMON_INLINE_EXTERN QPID_COMMON_EXTERN
++# else
++# define QPID_COMMON_CLASS_EXTERN QPID_COMMON_EXTERN
++# define QPID_COMMON_INLINE_EXTERN
++# endif
+ #else
+-#define QPID_COMMON_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QPID_COMMON_EXTERN
++# define QPID_COMMON_EXTERN
++# define QPID_COMMON_CLASS_EXTERN
++# define QPID_COMMON_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/include/qpid/Exception.h b/qpid/cpp/include/qpid/Exception.h
+index fa71111..cbd1752 100644
+--- a/qpid/cpp/include/qpid/Exception.h
++++ b/qpid/cpp/include/qpid/Exception.h
+@@ -36,7 +36,7 @@ namespace qpid
+ /**
+ * Base class for Qpid runtime exceptions.
+ */
+-class Exception : public std::exception
++class QPID_COMMON_CLASS_EXTERN Exception : public std::exception
+ {
+ public:
+ QPID_COMMON_EXTERN explicit Exception(const std::string& message=std::string()) throw();
+@@ -51,30 +51,30 @@ class Exception : public std::exception
+ };
+
+ /** Exception that includes an errno message. */
+-struct ErrnoException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN ErrnoException : public Exception {
+ ErrnoException(const std::string& msg, int err) : Exception(msg+": "+qpid::sys::strError(err)) {}
+ ErrnoException(const std::string& msg) : Exception(msg+": "+qpid::sys::strError(errno)) {}
+ };
+
+-struct SessionException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN SessionException : public Exception {
+ const framing::execution::ErrorCode code;
+ SessionException(framing::execution::ErrorCode code_, const std::string& message)
+ : Exception(message), code(code_) {}
+ };
+
+-struct ChannelException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN ChannelException : public Exception {
+ const framing::session::DetachCode code;
+ ChannelException(framing::session::DetachCode _code, const std::string& message)
+ : Exception(message), code(_code) {}
+ };
+
+-struct ConnectionException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN ConnectionException : public Exception {
+ const framing::connection::CloseCode code;
+ ConnectionException(framing::connection::CloseCode _code, const std::string& message)
+ : Exception(message), code(_code) {}
+ };
+
+-struct ClosedException : public Exception {
++struct QPID_COMMON_CLASS_EXTERN ClosedException : public Exception {
+ QPID_COMMON_EXTERN ClosedException(const std::string& msg=std::string());
+ QPID_COMMON_EXTERN std::string getPrefix() const;
+ };
+diff --git a/qpid/cpp/include/qpid/Url.h b/qpid/cpp/include/qpid/Url.h
+index 353e9d5..915b08a 100644
+--- a/qpid/cpp/include/qpid/Url.h
++++ b/qpid/cpp/include/qpid/Url.h
+@@ -66,7 +66,7 @@ struct Url : public std::vector<Address> {
+ *@exception Invalid if the url is invalid.
+ */
+ QPID_COMMON_EXTERN void parse(const char* url);
+- QPID_COMMON_EXTERN void parse(const std::string& url) { parse(url.c_str()); }
++ QPID_COMMON_INLINE_EXTERN void parse(const std::string& url) { parse(url.c_str()); }
+
+ /** Replace contesnts with parsed URL. Replace with empty URL if invalid. */
+ QPID_COMMON_EXTERN void parseNoThrow(const char* url);
+diff --git a/qpid/cpp/include/qpid/agent/QmfAgentImportExport.h b/qpid/cpp/include/qpid/agent/QmfAgentImportExport.h
+index e41425a..3231925 100644
+--- a/qpid/cpp/include/qpid/agent/QmfAgentImportExport.h
++++ b/qpid/cpp/include/qpid/agent/QmfAgentImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-#if defined (qmf_EXPORTS)
+-#define QMF_AGENT_EXTERN __declspec(dllexport)
++# if defined(QMF_EXPORT) || defined (qmf_EXPORTS)
++# define QMF_AGENT_EXTERN __declspec(dllexport)
++# else
++# define QMF_AGENT_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QMF_AGENT_CLASS_EXTERN
++# define QMF_AGENT_INLINE_EXTERN QMF_AGENT_EXTERN
++# else
++# define QMF_AGENT_CLASS_EXTERN QMF_AGENT_EXTERN
++# define QMF_AGENT_INLINE_EXTERN
++# endif
+ #else
+-#define QMF_AGENT_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QMF_AGENT_EXTERN
++# define QMF_AGENT_EXTERN
++# define QMF_AGENT_CLASS_EXTERN
++# define QMF_AGENT_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/include/qpid/client/ClientImportExport.h b/qpid/cpp/include/qpid/client/ClientImportExport.h
+index 42b02e3..683be3f 100644
+--- a/qpid/cpp/include/qpid/client/ClientImportExport.h
++++ b/qpid/cpp/include/qpid/client/ClientImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-#if defined(CLIENT_EXPORT) || defined (qpidclient_EXPORTS)
+-#define QPID_CLIENT_EXTERN __declspec(dllexport)
++# if defined(CLIENT_EXPORT) || defined (qpidclient_EXPORTS)
++# define QPID_CLIENT_EXTERN __declspec(dllexport)
++# else
++# define QPID_CLIENT_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QPID_CLIENT_CLASS_EXTERN
++# define QPID_CLIENT_INLINE_EXTERN QPID_CLIENT_EXTERN
++# else
++# define QPID_CLIENT_CLASS_EXTERN QPID_CLIENT_EXTERN
++# define QPID_CLIENT_INLINE_EXTERN
++# endif
+ #else
+-#define QPID_CLIENT_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QPID_CLIENT_EXTERN
++# define QPID_CLIENT_EXTERN
++# define QPID_CLIENT_CLASS_EXTERN
++# define QPID_CLIENT_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/include/qpid/client/Completion.h b/qpid/cpp/include/qpid/client/Completion.h
+index 99d940f..9546db9 100644
+--- a/qpid/cpp/include/qpid/client/Completion.h
++++ b/qpid/cpp/include/qpid/client/Completion.h
+@@ -41,7 +41,7 @@ template <class T> class PrivateImplRef;
+ *
+ *\ingroup clientapi
+ */
+-class Completion : public Handle<CompletionImpl>
++class QPID_CLIENT_CLASS_EXTERN Completion : public Handle<CompletionImpl>
+ {
+ public:
+ QPID_CLIENT_EXTERN Completion(CompletionImpl* = 0);
+diff --git a/qpid/cpp/include/qpid/client/Connection.h b/qpid/cpp/include/qpid/client/Connection.h
+index 6ed0d98..2477bf4 100644
+--- a/qpid/cpp/include/qpid/client/Connection.h
++++ b/qpid/cpp/include/qpid/client/Connection.h
+@@ -60,7 +60,7 @@ class ConnectionImpl;
+ *
+ */
+
+-class Connection
++class QPID_CLIENT_CLASS_EXTERN Connection
+ {
+ framing::ProtocolVersion version;
+
+diff --git a/qpid/cpp/include/qpid/client/ConnectionSettings.h b/qpid/cpp/include/qpid/client/ConnectionSettings.h
+index 1c2ee28..2b6b86f 100644
+--- a/qpid/cpp/include/qpid/client/ConnectionSettings.h
++++ b/qpid/cpp/include/qpid/client/ConnectionSettings.h
+@@ -37,7 +37,7 @@ namespace client {
+ /**
+ * Settings for a Connection.
+ */
+-struct ConnectionSettings {
++struct QPID_CLIENT_CLASS_EXTERN ConnectionSettings {
+
+ QPID_CLIENT_EXTERN ConnectionSettings();
+ QPID_CLIENT_EXTERN virtual ~ConnectionSettings();
+diff --git a/qpid/cpp/include/qpid/client/FailoverListener.h b/qpid/cpp/include/qpid/client/FailoverListener.h
+index 59108eb..53c7c26 100644
+--- a/qpid/cpp/include/qpid/client/FailoverListener.h
++++ b/qpid/cpp/include/qpid/client/FailoverListener.h
+@@ -48,7 +48,7 @@ namespace client {
+ * FailoverListener::decode to extract a list of broker URLs from a
+ * failover exchange message.
+ */
+-class FailoverListener : private MessageListener, private qpid::sys::Runnable
++class QPID_CLIENT_CLASS_EXTERN FailoverListener : private MessageListener, private qpid::sys::Runnable
+ {
+ public:
+ /** The name of the standard failover exchange amq.failover */
+diff --git a/qpid/cpp/include/qpid/client/FailoverManager.h b/qpid/cpp/include/qpid/client/FailoverManager.h
+index 0d30e2e..d3a0dbc 100644
+--- a/qpid/cpp/include/qpid/client/FailoverManager.h
++++ b/qpid/cpp/include/qpid/client/FailoverManager.h
+@@ -42,7 +42,7 @@ struct CannotConnectException : qpid::Exception
+ /**
+ * Utility to manage failover.
+ */
+-class FailoverManager
++class QPID_CLIENT_CLASS_EXTERN FailoverManager
+ {
+ public:
+ /**
+diff --git a/qpid/cpp/include/qpid/client/Future.h b/qpid/cpp/include/qpid/client/Future.h
+index 09088e6..630a7e0 100644
+--- a/qpid/cpp/include/qpid/client/Future.h
++++ b/qpid/cpp/include/qpid/client/Future.h
+@@ -34,7 +34,7 @@ namespace qpid {
+ namespace client {
+
+ /**@internal */
+-class Future
++class QPID_CLIENT_CLASS_EXTERN Future
+ {
+ framing::SequenceNumber command;
+ boost::shared_ptr<FutureResult> result;
+diff --git a/qpid/cpp/include/qpid/client/FutureResult.h b/qpid/cpp/include/qpid/client/FutureResult.h
+index b2b663d..ead4929 100644
+--- a/qpid/cpp/include/qpid/client/FutureResult.h
++++ b/qpid/cpp/include/qpid/client/FutureResult.h
+@@ -34,7 +34,7 @@ namespace client {
+ class SessionImpl;
+
+ ///@internal
+-class FutureResult : public FutureCompletion
++class QPID_CLIENT_CLASS_EXTERN FutureResult : public FutureCompletion
+ {
+ std::string result;
+ public:
+diff --git a/qpid/cpp/include/qpid/client/Handle.h b/qpid/cpp/include/qpid/client/Handle.h
+index 088e836..b831548 100644
+--- a/qpid/cpp/include/qpid/client/Handle.h
++++ b/qpid/cpp/include/qpid/client/Handle.h
+@@ -40,22 +40,22 @@ template <class T> class Handle {
+ public:
+
+ /**@return true if handle is valid, i.e. not null. */
+- QPID_CLIENT_EXTERN bool isValid() const { return impl; }
++ QPID_CLIENT_INLINE_EXTERN bool isValid() const { return impl; }
+
+ /**@return true if handle is null. It is an error to call any function on a null handle. */
+- QPID_CLIENT_EXTERN bool isNull() const { return !impl; }
++ QPID_CLIENT_INLINE_EXTERN bool isNull() const { return !impl; }
+
+ /** Conversion to bool supports idiom if (handle) { handle->... } */
+- QPID_CLIENT_EXTERN operator bool() const { return impl; }
++ QPID_CLIENT_INLINE_EXTERN operator bool() const { return impl; }
+
+ /** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
+- QPID_CLIENT_EXTERN bool operator !() const { return !impl; }
++ QPID_CLIENT_INLINE_EXTERN bool operator !() const { return !impl; }
+
+ void swap(Handle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
+
+ protected:
+ typedef T Impl;
+- QPID_CLIENT_EXTERN Handle() :impl() {}
++ QPID_CLIENT_INLINE_EXTERN Handle() :impl() {}
+
+ // Not implemented,subclasses must implement.
+ QPID_CLIENT_EXTERN Handle(const Handle&);
+diff --git a/qpid/cpp/include/qpid/client/LocalQueue.h b/qpid/cpp/include/qpid/client/LocalQueue.h
+index 70e4ceb..1a19a84 100644
+--- a/qpid/cpp/include/qpid/client/LocalQueue.h
++++ b/qpid/cpp/include/qpid/client/LocalQueue.h
+@@ -71,7 +71,7 @@ template <class T> class PrivateImplRef;
+ * </ul>
+ */
+
+-class LocalQueue : public Handle<LocalQueueImpl> {
++class QPID_CLIENT_CLASS_EXTERN LocalQueue : public Handle<LocalQueueImpl> {
+ public:
+ /** Create a local queue. Subscribe the local queue to a remote broker
+ * queue with a SubscriptionManager.
+diff --git a/qpid/cpp/include/qpid/client/Message.h b/qpid/cpp/include/qpid/client/Message.h
+index 2401cbd..ba50dda 100644
+--- a/qpid/cpp/include/qpid/client/Message.h
++++ b/qpid/cpp/include/qpid/client/Message.h
+@@ -112,7 +112,7 @@ class MessageImpl;
+ *
+ *
+ */
+-class Message
++class QPID_CLIENT_CLASS_EXTERN Message
+ {
+ public:
+ /** Create a Message.
+diff --git a/qpid/cpp/include/qpid/client/MessageListener.h b/qpid/cpp/include/qpid/client/MessageListener.h
+index d200f8c..3ca2fa9 100644
+--- a/qpid/cpp/include/qpid/client/MessageListener.h
++++ b/qpid/cpp/include/qpid/client/MessageListener.h
+@@ -84,7 +84,7 @@ namespace client {
+ *
+ */
+
+- class MessageListener{
++ class QPID_CLIENT_CLASS_EXTERN MessageListener{
+ public:
+ QPID_CLIENT_EXTERN virtual ~MessageListener();
+
+diff --git a/qpid/cpp/include/qpid/client/MessageReplayTracker.h b/qpid/cpp/include/qpid/client/MessageReplayTracker.h
+index 6f5a0f4..06a3f29 100644
+--- a/qpid/cpp/include/qpid/client/MessageReplayTracker.h
++++ b/qpid/cpp/include/qpid/client/MessageReplayTracker.h
+@@ -34,7 +34,7 @@ namespace client {
+ * Utility to track messages sent asynchronously, allowing those that
+ * are indoubt to be replayed over a new session.
+ */
+-class MessageReplayTracker
++class QPID_CLIENT_CLASS_EXTERN MessageReplayTracker
+ {
+ public:
+ QPID_CLIENT_EXTERN MessageReplayTracker(uint flushInterval);
+diff --git a/qpid/cpp/include/qpid/client/QueueOptions.h b/qpid/cpp/include/qpid/client/QueueOptions.h
+index f8a4963..3984b63 100644
+--- a/qpid/cpp/include/qpid/client/QueueOptions.h
++++ b/qpid/cpp/include/qpid/client/QueueOptions.h
+@@ -35,7 +35,7 @@ enum QueueOrderingPolicy {FIFO, LVQ, LVQ_NO_BROWSE};
+ * A help class to set options on the Queue. Create a configured args while
+ * still allowing any custom configuration via the FieldTable base class
+ */
+-class QueueOptions: public framing::FieldTable
++class QPID_CLIENT_CLASS_EXTERN QueueOptions: public framing::FieldTable
+ {
+ public:
+ QPID_CLIENT_EXTERN QueueOptions();
+diff --git a/qpid/cpp/include/qpid/client/SessionBase_0_10.h b/qpid/cpp/include/qpid/client/SessionBase_0_10.h
+index 3b5c84e..ea50ab3 100644
+--- a/qpid/cpp/include/qpid/client/SessionBase_0_10.h
++++ b/qpid/cpp/include/qpid/client/SessionBase_0_10.h
+@@ -54,7 +54,7 @@ enum CreditUnit { MESSAGE_CREDIT=0, BYTE_CREDIT=1, UNLIMITED_CREDIT=0xFFFFFFFF }
+ * Subclasses provide the AMQP commands for a given
+ * version of the protocol.
+ */
+-class SessionBase_0_10 {
++class QPID_CLIENT_CLASS_EXTERN SessionBase_0_10 {
+ public:
+
+ ///@internal
+diff --git a/qpid/cpp/include/qpid/client/Subscription.h b/qpid/cpp/include/qpid/client/Subscription.h
+index 425b6b9..bb9b98e 100644
+--- a/qpid/cpp/include/qpid/client/Subscription.h
++++ b/qpid/cpp/include/qpid/client/Subscription.h
+@@ -39,7 +39,7 @@ class SubscriptionManager;
+ * A handle to an active subscription. Provides methods to query the subscription status
+ * and control acknowledgement (acquire and accept) of messages.
+ */
+-class Subscription : public Handle<SubscriptionImpl> {
++class QPID_CLIENT_CLASS_EXTERN Subscription : public Handle<SubscriptionImpl> {
+ public:
+ QPID_CLIENT_EXTERN Subscription(SubscriptionImpl* = 0);
+ QPID_CLIENT_EXTERN Subscription(const Subscription&);
+@@ -91,13 +91,13 @@ class Subscription : public Handle<SubscriptionImpl> {
+ QPID_CLIENT_EXTERN void release(const SequenceSet& messageIds);
+
+ /* Acquire a single message */
+- QPID_CLIENT_EXTERN void acquire(const Message& m) { acquire(SequenceSet(m.getId())); }
++ QPID_CLIENT_INLINE_EXTERN void acquire(const Message& m) { acquire(SequenceSet(m.getId())); }
+
+ /* Accept a single message */
+- QPID_CLIENT_EXTERN void accept(const Message& m) { accept(SequenceSet(m.getId())); }
++ QPID_CLIENT_INLINE_EXTERN void accept(const Message& m) { accept(SequenceSet(m.getId())); }
+
+ /* Release a single message */
+- QPID_CLIENT_EXTERN void release(const Message& m) { release(SequenceSet(m.getId())); }
++ QPID_CLIENT_INLINE_EXTERN void release(const Message& m) { release(SequenceSet(m.getId())); }
+
+ /** Get the session associated with this subscription */
+ QPID_CLIENT_EXTERN Session getSession() const;
+diff --git a/qpid/cpp/include/qpid/client/SubscriptionManager.h b/qpid/cpp/include/qpid/client/SubscriptionManager.h
+index e70e05f..b69819a 100644
+--- a/qpid/cpp/include/qpid/client/SubscriptionManager.h
++++ b/qpid/cpp/include/qpid/client/SubscriptionManager.h
+@@ -94,7 +94,7 @@ class SubscriptionManagerImpl;
+ * </ul>
+ *
+ */
+-class SubscriptionManager : public sys::Runnable, public Handle<SubscriptionManagerImpl>
++class QPID_CLIENT_CLASS_EXTERN SubscriptionManager : public sys::Runnable, public Handle<SubscriptionManagerImpl>
+ {
+ public:
+ /** Create a new SubscriptionManager associated with a session */
+diff --git a/qpid/cpp/include/qpid/console/Agent.h b/qpid/cpp/include/qpid/console/Agent.h
+index 97d75da..629dd71 100644
+--- a/qpid/cpp/include/qpid/console/Agent.h
++++ b/qpid/cpp/include/qpid/console/Agent.h
+@@ -31,17 +31,17 @@ namespace console {
+ *
+ * \ingroup qmfconsoleapi
+ */
+- class QPID_CONSOLE_EXTERN Agent {
++ class QPID_CONSOLE_CLASS_EXTERN Agent {
+ public:
+ typedef std::vector<Agent*> Vector;
+
+- Agent(Broker* _broker, uint32_t _bank, const std::string& _label) :
++ QPID_CONSOLE_INLINE_EXTERN Agent(Broker* _broker, uint32_t _bank, const std::string& _label) :
+ broker(_broker), brokerBank(broker->getBrokerBank()),
+ agentBank(_bank), label(_label) {}
+- Broker* getBroker() const { return broker; }
+- uint32_t getBrokerBank() const { return brokerBank; }
+- uint32_t getAgentBank() const { return agentBank; }
+- const std::string& getLabel() const { return label; }
++ QPID_CONSOLE_INLINE_EXTERN Broker* getBroker() const { return broker; }
++ QPID_CONSOLE_INLINE_EXTERN uint32_t getBrokerBank() const { return brokerBank; }
++ QPID_CONSOLE_INLINE_EXTERN uint32_t getAgentBank() const { return agentBank; }
++ QPID_CONSOLE_INLINE_EXTERN const std::string& getLabel() const { return label; }
+
+ private:
+ Broker* broker;
+@@ -50,7 +50,7 @@ namespace console {
+ const std::string label;
+ };
+
+- QPID_CONSOLE_EXTERN std::ostream& operator<<(std::ostream& o, const Agent& agent);
++ std::ostream& operator<<(std::ostream& o, const Agent& agent);
+ }
+ }
+
+diff --git a/qpid/cpp/include/qpid/console/Broker.h b/qpid/cpp/include/qpid/console/Broker.h
+index 0b2d1bc..c2ba8ac 100644
+--- a/qpid/cpp/include/qpid/console/Broker.h
++++ b/qpid/cpp/include/qpid/console/Broker.h
+@@ -55,12 +55,12 @@ namespace console {
+ client::ConnectionSettings& settings);
+ QPID_CONSOLE_EXTERN ~Broker();
+
+- QPID_CONSOLE_EXTERN bool isConnected() const { return connected; }
+- QPID_CONSOLE_EXTERN const std::string& getError() const { return error; }
+- QPID_CONSOLE_EXTERN const std::string& getSessionId() const { return amqpSessionId; }
+- QPID_CONSOLE_EXTERN const framing::Uuid& getBrokerId() const { return brokerId; }
+- QPID_CONSOLE_EXTERN uint32_t getBrokerBank() const { return 1; }
+- QPID_CONSOLE_EXTERN void addBinding(const std::string& key) {
++ QPID_CONSOLE_INLINE_EXTERN bool isConnected() const { return connected; }
++ QPID_CONSOLE_INLINE_EXTERN const std::string& getError() const { return error; }
++ QPID_CONSOLE_INLINE_EXTERN const std::string& getSessionId() const { return amqpSessionId; }
++ QPID_CONSOLE_INLINE_EXTERN const framing::Uuid& getBrokerId() const { return brokerId; }
++ QPID_CONSOLE_INLINE_EXTERN uint32_t getBrokerBank() const { return 1; }
++ QPID_CONSOLE_INLINE_EXTERN void addBinding(const std::string& key) {
+ connThreadBody.bindExchange("qpid.management", key);
+ }
+ QPID_CONSOLE_EXTERN std::string getUrl() const;
+@@ -123,10 +123,10 @@ namespace console {
+ void setBrokerId(const framing::Uuid& id) { brokerId = id; }
+ void appendAgents(std::vector<Agent*>& agents) const;
+
+- friend QPID_CONSOLE_EXTERN std::ostream& operator<<(std::ostream& o, const Broker& k);
++ friend std::ostream& operator<<(std::ostream& o, const Broker& k);
+ };
+
+- QPID_CONSOLE_EXTERN std::ostream& operator<<(std::ostream& o, const Broker& k);
++ std::ostream& operator<<(std::ostream& o, const Broker& k);
+ }
+ }
+
+diff --git a/qpid/cpp/include/qpid/console/ConsoleImportExport.h b/qpid/cpp/include/qpid/console/ConsoleImportExport.h
+index c2d7cb3..0f9a37c 100644
+--- a/qpid/cpp/include/qpid/console/ConsoleImportExport.h
++++ b/qpid/cpp/include/qpid/console/ConsoleImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-#if defined(CONSOLE_EXPORT) || defined (qmfconsole_EXPORTS)
+-#define QPID_CONSOLE_EXTERN __declspec(dllexport)
++# if defined(CONSOLE_EXPORT) || defined (qmfconsole_EXPORTS)
++# define QPID_CONSOLE_EXTERN __declspec(dllexport)
++# else
++# define QPID_CONSOLE_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QPID_CONSOLE_CLASS_EXTERN
++# define QPID_CONSOLE_INLINE_EXTERN QPID_CONSOLE_EXTERN
++# else
++# define QPID_CONSOLE_CLASS_EXTERN QPID_CONSOLE_EXTERN
++# define QPID_CONSOLE_INLINE_EXTERN
++# endif
+ #else
+-#define QPID_CONSOLE_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QPID_CONSOLE_EXTERN
++# define QPID_CONSOLE_EXTERN
++# define QPID_CONSOLE_CLASS_EXTERN
++# define QPID_CONSOLE_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/include/qpid/framing/Array.h b/qpid/cpp/include/qpid/framing/Array.h
+index d3bdd36..1e97be3 100644
+--- a/qpid/cpp/include/qpid/framing/Array.h
++++ b/qpid/cpp/include/qpid/framing/Array.h
+@@ -34,7 +34,7 @@ namespace framing {
+
+ class Buffer;
+
+-class Array
++class QPID_COMMON_CLASS_EXTERN Array
+ {
+ public:
+ typedef boost::shared_ptr<FieldValue> ValuePtr;
+@@ -55,25 +55,25 @@ class Array
+ //creates a longstr array
+ QPID_COMMON_EXTERN Array(const std::vector<std::string>& in);
+
+- QPID_COMMON_EXTERN TypeCode getType() const { return type; }
++ QPID_COMMON_INLINE_EXTERN TypeCode getType() const { return type; }
+
+ // std collection interface.
+- QPID_COMMON_EXTERN const_iterator begin() const { return values.begin(); }
+- QPID_COMMON_EXTERN const_iterator end() const { return values.end(); }
+- QPID_COMMON_EXTERN iterator begin() { return values.begin(); }
+- QPID_COMMON_EXTERN iterator end(){ return values.end(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator begin() const { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator end() const { return values.end(); }
++ QPID_COMMON_INLINE_EXTERN iterator begin() { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN iterator end(){ return values.end(); }
+
+- QPID_COMMON_EXTERN ValuePtr front() const { return values.front(); }
+- QPID_COMMON_EXTERN ValuePtr back() const { return values.back(); }
+- QPID_COMMON_EXTERN size_t size() const { return values.size(); }
++ QPID_COMMON_INLINE_EXTERN ValuePtr front() const { return values.front(); }
++ QPID_COMMON_INLINE_EXTERN ValuePtr back() const { return values.back(); }
++ QPID_COMMON_INLINE_EXTERN size_t size() const { return values.size(); }
+
+ QPID_COMMON_EXTERN void insert(iterator i, ValuePtr value);
+- QPID_COMMON_EXTERN void erase(iterator i) { values.erase(i); }
+- QPID_COMMON_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
+- QPID_COMMON_EXTERN void pop_back() { values.pop_back(); }
++ QPID_COMMON_INLINE_EXTERN void erase(iterator i) { values.erase(i); }
++ QPID_COMMON_INLINE_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
++ QPID_COMMON_INLINE_EXTERN void pop_back() { values.pop_back(); }
+
+ // Non-std interface
+- QPID_COMMON_EXTERN void add(ValuePtr value) { push_back(value); }
++ QPID_COMMON_INLINE_EXTERN void add(ValuePtr value) { push_back(value); }
+
+ template <class T>
+ void collect(std::vector<T>& out) const
+diff --git a/qpid/cpp/include/qpid/framing/Buffer.h b/qpid/cpp/include/qpid/framing/Buffer.h
+index 0458343..8b08e60 100644
+--- a/qpid/cpp/include/qpid/framing/Buffer.h
++++ b/qpid/cpp/include/qpid/framing/Buffer.h
+@@ -29,14 +29,14 @@
+ namespace qpid {
+ namespace framing {
+
+-struct OutOfBounds : qpid::Exception {
++struct QPID_COMMON_CLASS_EXTERN OutOfBounds : qpid::Exception {
+ OutOfBounds() : qpid::Exception(std::string("Out of Bounds")) {}
+ };
+
+ class Content;
+ class FieldTable;
+
+-class Buffer
++class QPID_COMMON_CLASS_EXTERN Buffer
+ {
+ uint32_t size;
+ char* data;
+@@ -72,12 +72,12 @@ class Buffer
+ QPID_COMMON_EXTERN void restore(bool reRecord = false);
+ QPID_COMMON_EXTERN void reset();
+
+- QPID_COMMON_EXTERN uint32_t available() { return size - position; }
+- QPID_COMMON_EXTERN uint32_t getSize() { return size; }
+- QPID_COMMON_EXTERN uint32_t getPosition() { return position; }
+- QPID_COMMON_EXTERN void setPosition(uint32_t p) { position = p; }
+- QPID_COMMON_EXTERN Iterator getIterator() { return Iterator(*this); }
+- QPID_COMMON_EXTERN char* getPointer() { return data; }
++ QPID_COMMON_INLINE_EXTERN uint32_t available() { return size - position; }
++ QPID_COMMON_INLINE_EXTERN uint32_t getSize() { return size; }
++ QPID_COMMON_INLINE_EXTERN uint32_t getPosition() { return position; }
++ QPID_COMMON_INLINE_EXTERN void setPosition(uint32_t p) { position = p; }
++ QPID_COMMON_INLINE_EXTERN Iterator getIterator() { return Iterator(*this); }
++ QPID_COMMON_INLINE_EXTERN char* getPointer() { return data; }
+
+ QPID_COMMON_EXTERN void putOctet(uint8_t i);
+ QPID_COMMON_EXTERN void putShort(uint16_t i);
+diff --git a/qpid/cpp/include/qpid/framing/FieldTable.h b/qpid/cpp/include/qpid/framing/FieldTable.h
+index fdb1a28..fed4311 100644
+--- a/qpid/cpp/include/qpid/framing/FieldTable.h
++++ b/qpid/cpp/include/qpid/framing/FieldTable.h
+@@ -56,7 +56,7 @@ class FieldTable
+ typedef ValueMap::reference reference;
+ typedef ValueMap::value_type value_type;
+
+- QPID_COMMON_EXTERN FieldTable() {};
++ QPID_COMMON_INLINE_EXTERN FieldTable() {};
+ QPID_COMMON_EXTERN FieldTable(const FieldTable& ft);
+ QPID_COMMON_EXTERN ~FieldTable();
+ QPID_COMMON_EXTERN FieldTable& operator=(const FieldTable& ft);
+@@ -67,7 +67,7 @@ class FieldTable
+ QPID_COMMON_EXTERN int count() const;
+ QPID_COMMON_EXTERN void set(const std::string& name, const ValuePtr& value);
+ QPID_COMMON_EXTERN ValuePtr get(const std::string& name) const;
+- QPID_COMMON_EXTERN bool isSet(const std::string& name) const { return get(name).get() != 0; }
++ QPID_COMMON_INLINE_EXTERN bool isSet(const std::string& name) const { return get(name).get() != 0; }
+
+ QPID_COMMON_EXTERN void setString(const std::string& name, const std::string& value);
+ QPID_COMMON_EXTERN void setInt(const std::string& name, const int value);
+diff --git a/qpid/cpp/include/qpid/framing/FieldValue.h b/qpid/cpp/include/qpid/framing/FieldValue.h
+index 19220e7..fd7b430 100644
+--- a/qpid/cpp/include/qpid/framing/FieldValue.h
++++ b/qpid/cpp/include/qpid/framing/FieldValue.h
+@@ -41,14 +41,14 @@ namespace framing {
+ *
+ * \ingroup clientapi
+ */
+-class FieldValueException : public qpid::Exception {};
++class QPID_COMMON_CLASS_EXTERN FieldValueException : public qpid::Exception {};
+
+ /**
+ * Exception thrown when we can't perform requested conversion
+ *
+ * \ingroup clientapi
+ */
+-struct InvalidConversionException : public FieldValueException {
++struct QPID_COMMON_CLASS_EXTERN InvalidConversionException : public FieldValueException {
+ InvalidConversionException() {}
+ };
+
+@@ -59,7 +59,7 @@ class List;
+ *
+ * \ingroup clientapi
+ */
+-class FieldValue {
++class QPID_COMMON_CLASS_EXTERN FieldValue {
+ public:
+ /*
+ * Abstract type for content of different types
+@@ -90,7 +90,7 @@ class FieldValue {
+ void encode(Buffer& buffer);
+ void decode(Buffer& buffer);
+ QPID_COMMON_EXTERN bool operator==(const FieldValue&) const;
+- QPID_COMMON_EXTERN bool operator!=(const FieldValue& v) const { return !(*this == v); }
++ QPID_COMMON_INLINE_EXTERN bool operator!=(const FieldValue& v) const { return !(*this == v); }
+
+ QPID_COMMON_EXTERN void print(std::ostream& out) const;
+
+diff --git a/qpid/cpp/include/qpid/framing/List.h b/qpid/cpp/include/qpid/framing/List.h
+index 0f17c78..417fd4b 100644
+--- a/qpid/cpp/include/qpid/framing/List.h
++++ b/qpid/cpp/include/qpid/framing/List.h
+@@ -36,7 +36,7 @@ class FieldValue;
+ /**
+ * Representation of an AMQP 0-10 list
+ */
+-class List
++class QPID_COMMON_CLASS_EXTERN List
+ {
+ public:
+ typedef boost::shared_ptr<FieldValue> ValuePtr;
+@@ -53,19 +53,19 @@ class List
+ QPID_COMMON_EXTERN bool operator==(const List& other) const;
+
+ // std collection interface.
+- QPID_COMMON_EXTERN const_iterator begin() const { return values.begin(); }
+- QPID_COMMON_EXTERN const_iterator end() const { return values.end(); }
+- QPID_COMMON_EXTERN iterator begin() { return values.begin(); }
+- QPID_COMMON_EXTERN iterator end(){ return values.end(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator begin() const { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN const_iterator end() const { return values.end(); }
++ QPID_COMMON_INLINE_EXTERN iterator begin() { return values.begin(); }
++ QPID_COMMON_INLINE_EXTERN iterator end(){ return values.end(); }
+
+- QPID_COMMON_EXTERN ValuePtr front() const { return values.front(); }
+- QPID_COMMON_EXTERN ValuePtr back() const { return values.back(); }
+- QPID_COMMON_EXTERN size_t size() const { return values.size(); }
++ QPID_COMMON_INLINE_EXTERN ValuePtr front() const { return values.front(); }
++ QPID_COMMON_INLINE_EXTERN ValuePtr back() const { return values.back(); }
++ QPID_COMMON_INLINE_EXTERN size_t size() const { return values.size(); }
+
+- QPID_COMMON_EXTERN iterator insert(iterator i, ValuePtr value) { return values.insert(i, value); }
+- QPID_COMMON_EXTERN void erase(iterator i) { values.erase(i); }
+- QPID_COMMON_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
+- QPID_COMMON_EXTERN void pop_back() { values.pop_back(); }
++ QPID_COMMON_INLINE_EXTERN iterator insert(iterator i, ValuePtr value) { return values.insert(i, value); }
++ QPID_COMMON_INLINE_EXTERN void erase(iterator i) { values.erase(i); }
++ QPID_COMMON_INLINE_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
++ QPID_COMMON_INLINE_EXTERN void pop_back() { values.pop_back(); }
+
+ private:
+ Values values;
+diff --git a/qpid/cpp/include/qpid/framing/ProtocolVersion.h b/qpid/cpp/include/qpid/framing/ProtocolVersion.h
+index e7e75d7..30094c1 100644
+--- a/qpid/cpp/include/qpid/framing/ProtocolVersion.h
++++ b/qpid/cpp/include/qpid/framing/ProtocolVersion.h
+@@ -29,7 +29,7 @@ namespace qpid
+ namespace framing
+ {
+
+-class ProtocolVersion
++class QPID_COMMON_CLASS_EXTERN ProtocolVersion
+ {
+ private:
+ uint8_t major_;
+@@ -39,16 +39,16 @@ public:
+ explicit ProtocolVersion(uint8_t _major=0, uint8_t _minor=0)
+ : major_(_major), minor_(_minor) {}
+
+- QPID_COMMON_EXTERN uint8_t getMajor() const { return major_; }
+- QPID_COMMON_EXTERN void setMajor(uint8_t major) { major_ = major; }
+- QPID_COMMON_EXTERN uint8_t getMinor() const { return minor_; }
+- QPID_COMMON_EXTERN void setMinor(uint8_t minor) { minor_ = minor; }
++ QPID_COMMON_INLINE_EXTERN uint8_t getMajor() const { return major_; }
++ QPID_COMMON_INLINE_EXTERN void setMajor(uint8_t major) { major_ = major; }
++ QPID_COMMON_INLINE_EXTERN uint8_t getMinor() const { return minor_; }
++ QPID_COMMON_INLINE_EXTERN void setMinor(uint8_t minor) { minor_ = minor; }
+ QPID_COMMON_EXTERN const std::string toString() const;
+
+ QPID_COMMON_EXTERN ProtocolVersion& operator=(ProtocolVersion p);
+
+ QPID_COMMON_EXTERN bool operator==(ProtocolVersion p) const;
+- QPID_COMMON_EXTERN bool operator!=(ProtocolVersion p) const { return ! (*this == p); }
++ QPID_COMMON_INLINE_EXTERN bool operator!=(ProtocolVersion p) const { return ! (*this == p); }
+ };
+
+ } // namespace framing
+diff --git a/qpid/cpp/include/qpid/framing/SequenceNumber.h b/qpid/cpp/include/qpid/framing/SequenceNumber.h
+index 1e53058..eed15a4 100644
+--- a/qpid/cpp/include/qpid/framing/SequenceNumber.h
++++ b/qpid/cpp/include/qpid/framing/SequenceNumber.h
+@@ -34,7 +34,7 @@ class Buffer;
+ /**
+ * 4-byte sequence number that 'wraps around'.
+ */
+-class SequenceNumber : public
++class QPID_COMMON_CLASS_EXTERN SequenceNumber : public
+ boost::equality_comparable<
+ SequenceNumber, boost::less_than_comparable<
+ SequenceNumber, boost::incrementable<
+diff --git a/qpid/cpp/include/qpid/framing/SequenceSet.h b/qpid/cpp/include/qpid/framing/SequenceSet.h
+index 39395e9..0a78e41 100644
+--- a/qpid/cpp/include/qpid/framing/SequenceSet.h
++++ b/qpid/cpp/include/qpid/framing/SequenceSet.h
+@@ -29,7 +29,7 @@ namespace qpid {
+ namespace framing {
+ class Buffer;
+
+-class SequenceSet : public RangeSet<SequenceNumber> {
++class QPID_COMMON_CLASS_EXTERN SequenceSet : public RangeSet<SequenceNumber> {
+ public:
+ SequenceSet() {}
+ SequenceSet(const RangeSet<SequenceNumber>& r)
+diff --git a/qpid/cpp/include/qpid/framing/StructHelper.h b/qpid/cpp/include/qpid/framing/StructHelper.h
+index fc9a790..21f9b91 100644
+--- a/qpid/cpp/include/qpid/framing/StructHelper.h
++++ b/qpid/cpp/include/qpid/framing/StructHelper.h
+@@ -30,7 +30,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class StructHelper
++class QPID_COMMON_CLASS_EXTERN StructHelper
+ {
+ public:
+
+diff --git a/qpid/cpp/include/qpid/framing/Uuid.h b/qpid/cpp/include/qpid/framing/Uuid.h
+index d0a8d02..ccfd7e9 100644
+--- a/qpid/cpp/include/qpid/framing/Uuid.h
++++ b/qpid/cpp/include/qpid/framing/Uuid.h
+@@ -52,22 +52,22 @@ struct Uuid : public boost::array<uint8_t, 16> {
+ // boost::array gives us ==, < etc.
+
+ /** Copy from 16 bytes of data. */
+- void assign(const uint8_t* data);
++ QPID_COMMON_EXTERN void assign(const uint8_t* data);
+
+ /** Set to a new unique identifier. */
+ QPID_COMMON_EXTERN void generate();
+
+ /** Set to all zeros. */
+- void clear();
++ QPID_COMMON_EXTERN void clear();
+
+ /** Test for null (all zeros). */
+ QPID_COMMON_EXTERN bool isNull() const;
+- operator bool() const { return !isNull(); }
+- bool operator!() const { return isNull(); }
++ QPID_COMMON_INLINE_EXTERN operator bool() const { return !isNull(); }
++ QPID_COMMON_INLINE_EXTERN bool operator!() const { return isNull(); }
+
+ QPID_COMMON_EXTERN void encode(framing::Buffer& buf) const;
+ QPID_COMMON_EXTERN void decode(framing::Buffer& buf);
+- QPID_COMMON_EXTERN uint32_t encodedSize() const
++ QPID_COMMON_INLINE_EXTERN uint32_t encodedSize() const
+ { return static_cast<uint32_t>(size()); }
+
+ /** String value in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb. */
+diff --git a/qpid/cpp/include/qpid/log/Logger.h b/qpid/cpp/include/qpid/log/Logger.h
+index 783ab7b..2c2119e 100644
+--- a/qpid/cpp/include/qpid/log/Logger.h
++++ b/qpid/cpp/include/qpid/log/Logger.h
+@@ -33,7 +33,7 @@ namespace log {
+ * is handled by Logger::Output-derived classes instantiated by the
+ * platform's sink-related options.
+ */
+-class Logger : private boost::noncopyable {
++class QPID_COMMON_CLASS_EXTERN Logger : private boost::noncopyable {
+ public:
+ /** Flags indicating what to include in the log output */
+ enum FormatFlag { FILE=1, LINE=2, FUNCTION=4, LEVEL=8, TIME=16, THREAD=32};
+@@ -93,7 +93,7 @@ class Logger : private boost::noncopyable {
+ QPID_COMMON_EXTERN void clear();
+
+ /** Get the options used to configure the logger. */
+- QPID_COMMON_EXTERN const Options& getOptions() const { return options; }
++ QPID_COMMON_INLINE_EXTERN const Options& getOptions() const { return options; }
+
+
+ private:
+diff --git a/qpid/cpp/include/qpid/management/ManagementObject.h b/qpid/cpp/include/qpid/management/ManagementObject.h
+index 747edda..16bf210 100644
+--- a/qpid/cpp/include/qpid/management/ManagementObject.h
++++ b/qpid/cpp/include/qpid/management/ManagementObject.h
+@@ -58,14 +58,14 @@ protected:
+ std::string agentName;
+ void fromString(const std::string&);
+ public:
+- QPID_COMMON_EXTERN ObjectId() : agent(0), first(0), second(0), agentEpoch(0) {}
+- QPID_COMMON_EXTERN ObjectId(const types::Variant& map) :
++ QPID_COMMON_INLINE_EXTERN ObjectId() : agent(0), first(0), second(0), agentEpoch(0) {}
++ QPID_COMMON_INLINE_EXTERN ObjectId(const types::Variant& map) :
+ agent(0), first(0), second(0), agentEpoch(0) { mapDecode(map.asMap()); }
+ QPID_COMMON_EXTERN ObjectId(uint8_t flags, uint16_t seq, uint32_t broker);
+ QPID_COMMON_EXTERN ObjectId(AgentAttachment* _agent, uint8_t flags, uint16_t seq);
+ QPID_COMMON_EXTERN ObjectId(std::istream&);
+ QPID_COMMON_EXTERN ObjectId(const std::string&);
+- QPID_COMMON_EXTERN ObjectId(const std::string& agentAddress, const std::string& key,
++ QPID_COMMON_INLINE_EXTERN ObjectId(const std::string& agentAddress, const std::string& key,
+ uint64_t epoch=0) : agent(0), first(0), second(0),
+ agentEpoch(epoch), v2Key(key), agentName(agentAddress) {}
+
+@@ -76,15 +76,15 @@ public:
+ QPID_COMMON_EXTERN void mapEncode(types::Variant::Map& map) const;
+ QPID_COMMON_EXTERN void mapDecode(const types::Variant::Map& map);
+ QPID_COMMON_EXTERN operator types::Variant::Map() const;
+- QPID_COMMON_EXTERN uint32_t encodedSize() const { return 16; };
++ QPID_COMMON_INLINE_EXTERN uint32_t encodedSize() const { return 16; };
+ QPID_COMMON_EXTERN void encode(std::string& buffer) const;
+ QPID_COMMON_EXTERN void decode(const std::string& buffer);
+ QPID_COMMON_EXTERN bool equalV1(const ObjectId &other) const;
+- QPID_COMMON_EXTERN void setV2Key(const std::string& _key) { v2Key = _key; }
++ QPID_COMMON_INLINE_EXTERN void setV2Key(const std::string& _key) { v2Key = _key; }
+ QPID_COMMON_EXTERN void setV2Key(const ManagementObject& object);
+- QPID_COMMON_EXTERN void setAgentName(const std::string& _name) { agentName = _name; }
+- QPID_COMMON_EXTERN const std::string& getAgentName() const { return agentName; }
+- QPID_COMMON_EXTERN const std::string& getV2Key() const { return v2Key; }
++ QPID_COMMON_INLINE_EXTERN void setAgentName(const std::string& _name) { agentName = _name; }
++ QPID_COMMON_INLINE_EXTERN const std::string& getAgentName() const { return agentName; }
++ QPID_COMMON_INLINE_EXTERN const std::string& getV2Key() const { return v2Key; }
+ friend QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, const ObjectId&);
+ };
+
+@@ -131,7 +131,7 @@ public:
+ virtual ~ManagementItem() {}
+ };
+
+-class ManagementObject : public ManagementItem
++class QPID_COMMON_CLASS_EXTERN ManagementObject : public ManagementItem
+ {
+ protected:
+
+diff --git a/qpid/cpp/include/qpid/messaging/Address.h b/qpid/cpp/include/qpid/messaging/Address.h
+index bebbfc7..63dce0c 100644
+--- a/qpid/cpp/include/qpid/messaging/Address.h
++++ b/qpid/cpp/include/qpid/messaging/Address.h
+@@ -119,7 +119,7 @@ class AddressImpl;
+ *
+ * An address has value semantics.
+ */
+-class Address
++class QPID_MESSAGING_CLASS_EXTERN Address
+ {
+ public:
+ QPID_MESSAGING_EXTERN Address();
+diff --git a/qpid/cpp/include/qpid/messaging/Connection.h b/qpid/cpp/include/qpid/messaging/Connection.h
+index 1ad7a72..e938f23 100644
+--- a/qpid/cpp/include/qpid/messaging/Connection.h
++++ b/qpid/cpp/include/qpid/messaging/Connection.h
+@@ -42,7 +42,7 @@ class Session;
+ * A connection represents a network connection to a remote endpoint.
+ */
+
+-class Connection : public qpid::messaging::Handle<ConnectionImpl>
++class QPID_MESSAGING_CLASS_EXTERN Connection : public qpid::messaging::Handle<ConnectionImpl>
+ {
+ public:
+ QPID_MESSAGING_EXTERN Connection(ConnectionImpl* impl);
+diff --git a/qpid/cpp/include/qpid/messaging/Duration.h b/qpid/cpp/include/qpid/messaging/Duration.h
+index abcf169..9afec60 100644
+--- a/qpid/cpp/include/qpid/messaging/Duration.h
++++ b/qpid/cpp/include/qpid/messaging/Duration.h
+@@ -32,7 +32,7 @@ namespace messaging {
+ /** \ingroup messaging
+ * A duration is a time in milliseconds.
+ */
+-class Duration
++class QPID_MESSAGING_CLASS_EXTERN Duration
+ {
+ public:
+ QPID_MESSAGING_EXTERN explicit Duration(uint64_t milliseconds);
+@@ -46,9 +46,9 @@ class Duration
+ };
+
+ QPID_MESSAGING_EXTERN Duration operator*(const Duration& duration,
+- uint64_t multiplier);
++ uint64_t multiplier);
+ QPID_MESSAGING_EXTERN Duration operator*(uint64_t multiplier,
+- const Duration& duration);
++ const Duration& duration);
+
+ }} // namespace qpid::messaging
+
+diff --git a/qpid/cpp/include/qpid/messaging/FailoverUpdates.h b/qpid/cpp/include/qpid/messaging/FailoverUpdates.h
+index 14a1a31..6d73146 100644
+--- a/qpid/cpp/include/qpid/messaging/FailoverUpdates.h
++++ b/qpid/cpp/include/qpid/messaging/FailoverUpdates.h
+@@ -32,7 +32,7 @@ struct FailoverUpdatesImpl;
+ * A utility to listen for updates on cluster membership and update
+ * the list of known urls for a connection accordingly.
+ */
+-class FailoverUpdates
++class QPID_MESSAGING_CLASS_EXTERN FailoverUpdates
+ {
+ public:
+ QPID_MESSAGING_EXTERN FailoverUpdates(Connection& connection);
+diff --git a/qpid/cpp/include/qpid/messaging/Handle.h b/qpid/cpp/include/qpid/messaging/Handle.h
+index 1e634ef..97a8f00 100644
+--- a/qpid/cpp/include/qpid/messaging/Handle.h
++++ b/qpid/cpp/include/qpid/messaging/Handle.h
+@@ -40,22 +40,22 @@ template <class T> class Handle {
+ public:
+
+ /**@return true if handle is valid, i.e. not null. */
+- QPID_MESSAGING_EXTERN bool isValid() const { return impl; }
++ QPID_MESSAGING_INLINE_EXTERN bool isValid() const { return impl; }
+
+ /**@return true if handle is null. It is an error to call any function on a null handle. */
+- QPID_MESSAGING_EXTERN bool isNull() const { return !impl; }
++ QPID_MESSAGING_INLINE_EXTERN bool isNull() const { return !impl; }
+
+ /** Conversion to bool supports idiom if (handle) { handle->... } */
+- QPID_MESSAGING_EXTERN operator bool() const { return impl; }
++ QPID_MESSAGING_INLINE_EXTERN operator bool() const { return impl; }
+
+ /** Operator ! supports idiom if (!handle) { do_if_handle_is_null(); } */
+- QPID_MESSAGING_EXTERN bool operator !() const { return !impl; }
++ QPID_MESSAGING_INLINE_EXTERN bool operator !() const { return !impl; }
+
+ void swap(Handle<T>& h) { T* t = h.impl; h.impl = impl; impl = t; }
+
+ protected:
+ typedef T Impl;
+- QPID_MESSAGING_EXTERN Handle() :impl() {}
++ QPID_MESSAGING_INLINE_EXTERN Handle() :impl() {}
+
+ // Not implemented,subclasses must implement.
+ QPID_MESSAGING_EXTERN Handle(const Handle&);
+diff --git a/qpid/cpp/include/qpid/messaging/ImportExport.h b/qpid/cpp/include/qpid/messaging/ImportExport.h
+index 52f3eb8..78c3e7a 100644
+--- a/qpid/cpp/include/qpid/messaging/ImportExport.h
++++ b/qpid/cpp/include/qpid/messaging/ImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-#if defined(CLIENT_EXPORT) || defined (qpidmessaging_EXPORTS)
+-#define QPID_MESSAGING_EXTERN __declspec(dllexport)
++# if defined(CLIENT_EXPORT) || defined (qpidmessaging_EXPORTS)
++# define QPID_MESSAGING_EXTERN __declspec(dllexport)
++# else
++# define QPID_MESSAGING_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QPID_MESSAGING_CLASS_EXTERN
++# define QPID_MESSAGING_INLINE_EXTERN QPID_MESSAGING_EXTERN
++# else
++# define QPID_MESSAGING_CLASS_EXTERN QPID_MESSAGING_EXTERN
++# define QPID_MESSAGING_INLINE_EXTERN
++# endif
+ #else
+-#define QPID_MESSAGING_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QPID_MESSAGING_EXTERN
++# define QPID_MESSAGING_EXTERN
++# define QPID_MESSAGING_CLASS_EXTERN
++# define QPID_MESSAGING_INLINE_EXTERN
+ #endif
+
+ #endif /*!QPID_MESSAGING_IMPORTEXPORT_H*/
+diff --git a/qpid/cpp/include/qpid/messaging/Message.h b/qpid/cpp/include/qpid/messaging/Message.h
+index d48af35..5cd978f 100644
+--- a/qpid/cpp/include/qpid/messaging/Message.h
++++ b/qpid/cpp/include/qpid/messaging/Message.h
+@@ -39,7 +39,7 @@ struct MessageImpl;
+ /** \ingroup messaging
+ * Representation of a message.
+ */
+-class Message
++class QPID_MESSAGING_CLASS_EXTERN Message
+ {
+ public:
+ QPID_MESSAGING_EXTERN Message(const std::string& bytes = std::string());
+@@ -107,9 +107,9 @@ class Message
+ friend struct MessageImplAccess;
+ };
+
+-struct EncodingException : qpid::types::Exception
++struct QPID_MESSAGING_CLASS_EXTERN EncodingException : qpid::types::Exception
+ {
+- EncodingException(const std::string& msg);
++ QPID_MESSAGING_EXTERN EncodingException(const std::string& msg);
+ };
+
+ /**
+@@ -122,8 +122,8 @@ struct EncodingException : qpid::types::Exception
+ * @exception EncodingException
+ */
+ QPID_MESSAGING_EXTERN void decode(const Message& message,
+- qpid::types::Variant::Map& map,
+- const std::string& encoding = std::string());
++ qpid::types::Variant::Map& map,
++ const std::string& encoding = std::string());
+ /**
+ * Decodes message content into a Variant::List.
+ *
+@@ -134,8 +134,8 @@ QPID_MESSAGING_EXTERN void decode(const Message& message,
+ * @exception EncodingException
+ */
+ QPID_MESSAGING_EXTERN void decode(const Message& message,
+- qpid::types::Variant::List& list,
+- const std::string& encoding = std::string());
++ qpid::types::Variant::List& list,
++ const std::string& encoding = std::string());
+ /**
+ * Encodes a Variant::Map into a message.
+ *
+@@ -146,8 +146,8 @@ QPID_MESSAGING_EXTERN void decode(const Message& message,
+ * @exception EncodingException
+ */
+ QPID_MESSAGING_EXTERN void encode(const qpid::types::Variant::Map& map,
+- Message& message,
+- const std::string& encoding = std::string());
++ Message& message,
++ const std::string& encoding = std::string());
+ /**
+ * Encodes a Variant::List into a message.
+ *
+@@ -158,8 +158,8 @@ QPID_MESSAGING_EXTERN void encode(const qpid::types::Variant::Map& map,
+ * @exception EncodingException
+ */
+ QPID_MESSAGING_EXTERN void encode(const qpid::types::Variant::List& list,
+- Message& message,
+- const std::string& encoding = std::string());
++ Message& message,
++ const std::string& encoding = std::string());
+
+ }} // namespace qpid::messaging
+
+diff --git a/qpid/cpp/include/qpid/messaging/Receiver.h b/qpid/cpp/include/qpid/messaging/Receiver.h
+index 6f3ae96..13317df 100644
+--- a/qpid/cpp/include/qpid/messaging/Receiver.h
++++ b/qpid/cpp/include/qpid/messaging/Receiver.h
+@@ -41,7 +41,7 @@ class Session;
+ /** \ingroup messaging
+ * Interface through which messages are received.
+ */
+-class Receiver : public qpid::messaging::Handle<ReceiverImpl>
++class QPID_MESSAGING_CLASS_EXTERN Receiver : public qpid::messaging::Handle<ReceiverImpl>
+ {
+ public:
+ QPID_MESSAGING_EXTERN Receiver(ReceiverImpl* impl = 0);
+diff --git a/qpid/cpp/include/qpid/messaging/Sender.h b/qpid/cpp/include/qpid/messaging/Sender.h
+index 85658f3..8e1c584 100644
+--- a/qpid/cpp/include/qpid/messaging/Sender.h
++++ b/qpid/cpp/include/qpid/messaging/Sender.h
+@@ -40,7 +40,7 @@ class Session;
+ /** \ingroup messaging
+ * Interface through which messages are sent.
+ */
+-class Sender : public qpid::messaging::Handle<SenderImpl>
++class QPID_MESSAGING_CLASS_EXTERN Sender : public qpid::messaging::Handle<SenderImpl>
+ {
+ public:
+ QPID_MESSAGING_EXTERN Sender(SenderImpl* impl = 0);
+diff --git a/qpid/cpp/include/qpid/messaging/Session.h b/qpid/cpp/include/qpid/messaging/Session.h
+index 6c02362..52786eb 100644
+--- a/qpid/cpp/include/qpid/messaging/Session.h
++++ b/qpid/cpp/include/qpid/messaging/Session.h
+@@ -46,7 +46,7 @@ class SessionImpl;
+ * A session represents a distinct 'conversation' which can involve
+ * sending and receiving messages to and from different addresses.
+ */
+-class Session : public qpid::messaging::Handle<SessionImpl>
++class QPID_MESSAGING_CLASS_EXTERN Session : public qpid::messaging::Handle<SessionImpl>
+ {
+ public:
+ QPID_MESSAGING_EXTERN Session(SessionImpl* impl = 0);
+diff --git a/qpid/cpp/include/qpid/messaging/exceptions.h b/qpid/cpp/include/qpid/messaging/exceptions.h
+index 0ff608b..07d1dc4 100644
+--- a/qpid/cpp/include/qpid/messaging/exceptions.h
++++ b/qpid/cpp/include/qpid/messaging/exceptions.h
+@@ -32,7 +32,7 @@ namespace messaging {
+ /** \ingroup messaging
+ */
+
+-struct MessagingException : public qpid::types::Exception
++struct QPID_MESSAGING_CLASS_EXTERN MessagingException : public qpid::types::Exception
+ {
+ QPID_MESSAGING_EXTERN MessagingException(const std::string& msg);
+ QPID_MESSAGING_EXTERN virtual ~MessagingException() throw();
+@@ -41,22 +41,22 @@ struct MessagingException : public qpid::types::Exception
+ //TODO: override what() to include detail if present
+ };
+
+-struct InvalidOptionString : public MessagingException
++struct QPID_MESSAGING_CLASS_EXTERN InvalidOptionString : public MessagingException
+ {
+ QPID_MESSAGING_EXTERN InvalidOptionString(const std::string& msg);
+ };
+
+-struct KeyError : public MessagingException
++struct QPID_MESSAGING_CLASS_EXTERN KeyError : public MessagingException
+ {
+ QPID_MESSAGING_EXTERN KeyError(const std::string&);
+ };
+
+-struct LinkError : public MessagingException
++struct QPID_MESSAGING_CLASS_EXTERN LinkError : public MessagingException
+ {
+ QPID_MESSAGING_EXTERN LinkError(const std::string&);
+ };
+
+-struct AddressError : public LinkError
++struct QPID_MESSAGING_CLASS_EXTERN AddressError : public LinkError
+ {
+ QPID_MESSAGING_EXTERN AddressError(const std::string&);
+ };
+@@ -65,17 +65,17 @@ struct AddressError : public LinkError
+ * Thrown when a syntactically correct address cannot be resolved or
+ * used.
+ */
+-struct ResolutionError : public AddressError
++struct QPID_MESSAGING_CLASS_EXTERN ResolutionError : public AddressError
+ {
+ QPID_MESSAGING_EXTERN ResolutionError(const std::string& msg);
+ };
+
+-struct AssertionFailed : public ResolutionError
++struct QPID_MESSAGING_CLASS_EXTERN AssertionFailed : public ResolutionError
+ {
+ QPID_MESSAGING_EXTERN AssertionFailed(const std::string& msg);
+ };
+
+-struct NotFound : public ResolutionError
++struct QPID_MESSAGING_CLASS_EXTERN NotFound : public ResolutionError
+ {
+ QPID_MESSAGING_EXTERN NotFound(const std::string& msg);
+ };
+@@ -83,67 +83,67 @@ struct NotFound : public ResolutionError
+ /**
+ * Thrown when an address string with inalid sytanx is used.
+ */
+-struct MalformedAddress : public AddressError
++struct QPID_MESSAGING_CLASS_EXTERN MalformedAddress : public AddressError
+ {
+ QPID_MESSAGING_EXTERN MalformedAddress(const std::string& msg);
+ };
+
+-struct ReceiverError : public LinkError
++struct QPID_MESSAGING_CLASS_EXTERN ReceiverError : public LinkError
+ {
+ QPID_MESSAGING_EXTERN ReceiverError(const std::string&);
+ };
+
+-struct FetchError : public ReceiverError
++struct QPID_MESSAGING_CLASS_EXTERN FetchError : public ReceiverError
+ {
+ QPID_MESSAGING_EXTERN FetchError(const std::string&);
+ };
+
+-struct NoMessageAvailable : public FetchError
++struct QPID_MESSAGING_CLASS_EXTERN NoMessageAvailable : public FetchError
+ {
+ QPID_MESSAGING_EXTERN NoMessageAvailable();
+ };
+
+-struct SenderError : public LinkError
++struct QPID_MESSAGING_CLASS_EXTERN SenderError : public LinkError
+ {
+ QPID_MESSAGING_EXTERN SenderError(const std::string&);
+ };
+
+-struct SendError : public SenderError
++struct QPID_MESSAGING_CLASS_EXTERN SendError : public SenderError
+ {
+ QPID_MESSAGING_EXTERN SendError(const std::string&);
+ };
+
+-struct TargetCapacityExceeded : public SendError
++struct QPID_MESSAGING_CLASS_EXTERN TargetCapacityExceeded : public SendError
+ {
+ QPID_MESSAGING_EXTERN TargetCapacityExceeded(const std::string&);
+ };
+
+-struct SessionError : public MessagingException
++struct QPID_MESSAGING_CLASS_EXTERN SessionError : public MessagingException
+ {
+ QPID_MESSAGING_EXTERN SessionError(const std::string&);
+ };
+
+-struct TransactionError : public SessionError
++struct QPID_MESSAGING_CLASS_EXTERN TransactionError : public SessionError
+ {
+ QPID_MESSAGING_EXTERN TransactionError(const std::string&);
+ };
+
+-struct TransactionAborted : public TransactionError
++struct QPID_MESSAGING_CLASS_EXTERN TransactionAborted : public TransactionError
+ {
+ QPID_MESSAGING_EXTERN TransactionAborted(const std::string&);
+ };
+
+-struct UnauthorizedAccess : public SessionError
++struct QPID_MESSAGING_CLASS_EXTERN UnauthorizedAccess : public SessionError
+ {
+ QPID_MESSAGING_EXTERN UnauthorizedAccess(const std::string&);
+ };
+
+-struct ConnectionError : public MessagingException
++struct QPID_MESSAGING_CLASS_EXTERN ConnectionError : public MessagingException
+ {
+ QPID_MESSAGING_EXTERN ConnectionError(const std::string&);
+ };
+
+-struct TransportFailure : public MessagingException
++struct QPID_MESSAGING_CLASS_EXTERN TransportFailure : public MessagingException
+ {
+ QPID_MESSAGING_EXTERN TransportFailure(const std::string&);
+ };
+diff --git a/qpid/cpp/include/qpid/sys/IntegerTypes.h b/qpid/cpp/include/qpid/sys/IntegerTypes.h
+index 89635f0..75fa921 100755
+--- a/qpid/cpp/include/qpid/sys/IntegerTypes.h
++++ b/qpid/cpp/include/qpid/sys/IntegerTypes.h
+@@ -21,7 +21,7 @@
+ *
+ */
+
+-#if (defined(_WINDOWS) || defined (WIN32)) && defined(_MSC_VER)
++#if (defined(_WINDOWS) || defined (WIN32))
+ #include "qpid/sys/windows/IntegerTypes.h"
+ #endif
+ #if !defined _WINDOWS && !defined WIN32
+diff --git a/qpid/cpp/include/qpid/sys/Runnable.h b/qpid/cpp/include/qpid/sys/Runnable.h
+index 0f1243a..fed7663 100644
+--- a/qpid/cpp/include/qpid/sys/Runnable.h
++++ b/qpid/cpp/include/qpid/sys/Runnable.h
+@@ -30,7 +30,7 @@ namespace sys {
+ /**
+ * Interface for objects that can be run, e.g. in a thread.
+ */
+-class Runnable
++class QPID_COMMON_CLASS_EXTERN Runnable
+ {
+ public:
+ /** Type to represent a runnable as a Functor */
+diff --git a/qpid/cpp/include/qpid/sys/Thread.h b/qpid/cpp/include/qpid/sys/Thread.h
+index 45a39e7..f556612 100644
+--- a/qpid/cpp/include/qpid/sys/Thread.h
++++ b/qpid/cpp/include/qpid/sys/Thread.h
+@@ -25,7 +25,11 @@
+ #include "qpid/CommonImportExport.h"
+
+ #ifdef _WIN32
+-# define QPID_TSS __declspec(thread)
++# ifdef _MSC_VER
++# define QPID_TSS __declspec(thread)
++# else
++# define QPID_TSS __thread
++# endif
+ #elif defined (__GNUC__)
+ # define QPID_TSS __thread
+ #elif defined (__SUNPRO_CC)
+diff --git a/qpid/cpp/include/qpid/sys/Time.h b/qpid/cpp/include/qpid/sys/Time.h
+index d3ab832..14b14ec 100644
+--- a/qpid/cpp/include/qpid/sys/Time.h
++++ b/qpid/cpp/include/qpid/sys/Time.h
+@@ -119,7 +119,7 @@ class Duration {
+ friend class AbsTime;
+
+ public:
+- QPID_COMMON_EXTERN inline Duration(int64_t time0 = 0);
++ QPID_COMMON_INLINE_EXTERN inline Duration(int64_t time0 = 0);
+ QPID_COMMON_EXTERN explicit Duration(const AbsTime& start, const AbsTime& finish);
+ inline operator int64_t() const;
+ };
+diff --git a/qpid/cpp/include/qpid/sys/windows/IntegerTypes.h b/qpid/cpp/include/qpid/sys/windows/IntegerTypes.h
+index ece1a61..fff320b 100755
+--- a/qpid/cpp/include/qpid/sys/windows/IntegerTypes.h
++++ b/qpid/cpp/include/qpid/sys/windows/IntegerTypes.h
+@@ -22,13 +22,17 @@
+ */
+
+ typedef unsigned char uint8_t;
+-typedef char int8_t;
+ typedef unsigned short uint16_t;
+ typedef short int16_t;
+ typedef unsigned int uint32_t;
+ typedef int int32_t;
++#if defined(_MSC_VER)
++typedef char int8_t;
+ typedef unsigned __int64 uint64_t;
+ typedef __int64 int64_t;
++#else
++#include <stdint.h>
++#endif
+
+ // Visual Studio doesn't define other common types, so set them up here too.
+ typedef unsigned int uint;
+diff --git a/qpid/cpp/include/qpid/types/Exception.h b/qpid/cpp/include/qpid/types/Exception.h
+index d061a7d..483d104 100644
+--- a/qpid/cpp/include/qpid/types/Exception.h
++++ b/qpid/cpp/include/qpid/types/Exception.h
+@@ -28,7 +28,7 @@
+ namespace qpid {
+ namespace types {
+
+-class Exception : public std::exception
++class QPID_TYPES_CLASS_EXTERN Exception : public std::exception
+ {
+ public:
+ QPID_TYPES_EXTERN explicit Exception(const std::string& message=std::string()) throw();
+diff --git a/qpid/cpp/include/qpid/types/ImportExport.h b/qpid/cpp/include/qpid/types/ImportExport.h
+index bb10575..491f6e7 100644
+--- a/qpid/cpp/include/qpid/types/ImportExport.h
++++ b/qpid/cpp/include/qpid/types/ImportExport.h
+@@ -21,13 +21,22 @@
+ */
+
+ #if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
+-#if defined(TYPES_EXPORT) || defined (qpidtypes_EXPORTS)
+-#define QPID_TYPES_EXTERN __declspec(dllexport)
++# if defined(TYPES_EXPORT) || defined (qpidtypes_EXPORTS)
++# define QPID_TYPES_EXTERN __declspec(dllexport)
++# else
++# define QPID_TYPES_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QPID_TYPES_CLASS_EXTERN
++# define QPID_TYPES_INLINE_EXTERN QPID_TYPES_EXTERN
++# else
++# define QPID_TYPES_CLASS_EXTERN QPID_TYPES_EXTERN
++# define QPID_TYPES_INLINE_EXTERN
++# endif
+ #else
+-#define QPID_TYPES_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QPID_TYPES_EXTERN
++# define QPID_TYPES_EXTERN
++# define QPID_TYPES_CLASS_EXTERN
++# define QPID_TYPES_INLINE_EXTERN
+ #endif
+
+ #endif /*!QPID_TYPES_IMPORTEXPORT_H*/
+diff --git a/qpid/cpp/include/qpid/types/Uuid.h b/qpid/cpp/include/qpid/types/Uuid.h
+index 467a895..02af4c7 100644
+--- a/qpid/cpp/include/qpid/types/Uuid.h
++++ b/qpid/cpp/include/qpid/types/Uuid.h
+@@ -29,7 +29,7 @@
+ namespace qpid {
+ namespace types {
+
+-class Uuid
++class QPID_TYPES_CLASS_EXTERN Uuid
+ {
+ public:
+ static const size_t SIZE;
+diff --git a/qpid/cpp/include/qpid/types/Variant.h b/qpid/cpp/include/qpid/types/Variant.h
+index d926013..4459fc4 100644
+--- a/qpid/cpp/include/qpid/types/Variant.h
++++ b/qpid/cpp/include/qpid/types/Variant.h
+@@ -36,7 +36,7 @@ namespace types {
+ /**
+ * Thrown when an illegal conversion of a variant is attempted.
+ */
+-struct InvalidConversion : public Exception
++struct QPID_TYPES_CLASS_EXTERN InvalidConversion : public Exception
+ {
+ InvalidConversion(const std::string& msg);
+ };
+@@ -67,7 +67,7 @@ class VariantImpl;
+ /**
+ * Represents a value of variable type.
+ */
+-class Variant
++class QPID_TYPES_CLASS_EXTERN Variant
+ {
+ public:
+ typedef std::map<std::string, Variant> Map;
+diff --git a/qpid/cpp/rubygen/0-10/specification.rb b/qpid/cpp/rubygen/0-10/specification.rb
+index 7366599..ef193f5 100755
+--- a/qpid/cpp/rubygen/0-10/specification.rb
++++ b/qpid/cpp/rubygen/0-10/specification.rb
+@@ -252,7 +252,7 @@ class Specification < CppGen
+ include "#{@dir}/specification"
+ namespace(@ns) {
+ genl "template <class F, class R=typename F::result_type>"
+- cpp_class("ProxyTemplate") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", "ProxyTemplate") {
+ public
+ genl "ProxyTemplate(F f=F()) : functor(f) {}"
+ @amqp.classes.each { |c|
+diff --git a/qpid/cpp/rubygen/MethodBodyDefaultVisitor.rb b/qpid/cpp/rubygen/MethodBodyDefaultVisitor.rb
+index 4f9b369..11dbcb8 100755
+--- a/qpid/cpp/rubygen/MethodBodyDefaultVisitor.rb
++++ b/qpid/cpp/rubygen/MethodBodyDefaultVisitor.rb
+@@ -33,7 +33,7 @@ class MethodBodyDefaultVisitorGen < CppGen
+ include "qpid/framing/MethodBodyConstVisitor"
+ namespace(@namespace) {
+ genl
+- cpp_class(@classname, "public MethodBodyConstVisitor") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", @classname, "public MethodBodyConstVisitor") {
+ genl "public:"
+ genl "virtual void defaultVisit() = 0;"
+ @amqp.methods_.each { |m|
+diff --git a/qpid/cpp/rubygen/cppgen.rb b/qpid/cpp/rubygen/cppgen.rb
+index f099510..7dc21fe 100755
+--- a/qpid/cpp/rubygen/cppgen.rb
++++ b/qpid/cpp/rubygen/cppgen.rb
+@@ -377,6 +377,9 @@ class CppGen < Generator
+ def cpp_class(name, *bases, &block)
+ struct_class("class", name, bases, &block);
+ end
++ def cpp_extern_class(scope, name, *bases, &block)
++ struct_class("class "+scope, name, bases, &block);
++ end
+
+ def typedef(type, name) genl "typedef #{type} #{name};\n"; end
+
+diff --git a/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb b/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb
+index 00962de..4c58ff2 100755
+--- a/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb
++++ b/qpid/cpp/rubygen/framing.0-10/MethodBodyDefaultVisitor.rb
+@@ -33,7 +33,7 @@ class MethodBodyDefaultVisitorGen < CppGen
+ include "qpid/CommonImportExport.h"
+ namespace(@namespace) {
+ genl "class AMQMethodBody;"
+- cpp_class(@classname, "public MethodBodyConstVisitor") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", @classname, "public MethodBodyConstVisitor") {
+ genl "public:"
+ genl "virtual void defaultVisit(const AMQMethodBody&) = 0;"
+ @amqp.methods_.each { |m|
+diff --git a/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb b/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb
+index f9b6cac..f9b5ce5 100755
+--- a/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb
++++ b/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb
+@@ -69,7 +69,7 @@ class OperationsInvokerGen < CppGen
+ def invoker_h(invoker, target, methods)
+ return if methods.empty?
+ genl
+- cpp_class(invoker, "public qpid::framing::Invoker") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", invoker, "public qpid::framing::Invoker") {
+ genl "#{target}& target;"
+ public
+ genl("Invoker(#{target}& target_) : target(target_) {}")
+diff --git a/qpid/cpp/rubygen/framing.0-10/Proxy.rb b/qpid/cpp/rubygen/framing.0-10/Proxy.rb
+index 6e3cb4f..3325616 100755
+--- a/qpid/cpp/rubygen/framing.0-10/Proxy.rb
++++ b/qpid/cpp/rubygen/framing.0-10/Proxy.rb
+@@ -37,7 +37,7 @@ class ProxyGen < CppGen
+
+ def inner_class_decl(c)
+ cname=c.name.caps
+- cpp_class(cname, "public Proxy") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", cname, "public Proxy") {
+ gen <<EOS
+ public:
+ #{cname}(FrameHandler& f) : Proxy(f) {}
+@@ -69,7 +69,7 @@ EOS
+ include "qpid/CommonImportExport.h"
+
+ namespace("qpid::framing") {
+- cpp_class(@classname, "public Proxy") {
++ cpp_extern_class("QPID_COMMON_CLASS_EXTERN", @classname, "public Proxy") {
+ public
+ genl "QPID_COMMON_EXTERN #{@classname}(FrameHandler& out);"
+ genl
+diff --git a/qpid/cpp/rubygen/framing.0-10/Session.rb b/qpid/cpp/rubygen/framing.0-10/Session.rb
+index 61f0e03..e800df9 100755
+--- a/qpid/cpp/rubygen/framing.0-10/Session.rb
++++ b/qpid/cpp/rubygen/framing.0-10/Session.rb
+@@ -56,8 +56,8 @@ module SyncAsync
+ def decl_ctor_opeq()
+ genl
+ genl "QPID_CLIENT_EXTERN #{@classname}();"
+- genl "QPID_CLIENT_EXTERN #{@classname}(const #{@version_base}& other);"
+- genl "QPID_CLIENT_EXTERN #{@classname}& operator=(const #{@version_base}& other);"
++ genl "QPID_CLIENT_INLINE_EXTERN #{@classname}(const #{@version_base}& other);"
++ genl "QPID_CLIENT_INLINE_EXTERN #{@classname}& operator=(const #{@version_base}& other);"
+ end
+
+ def defn_ctor_opeq(inline="")
+diff --git a/qpid/cpp/rubygen/framing.0-10/structs.rb b/qpid/cpp/rubygen/framing.0-10/structs.rb
+index c3684ae..62b33ce 100755
+--- a/qpid/cpp/rubygen/framing.0-10/structs.rb
++++ b/qpid/cpp/rubygen/framing.0-10/structs.rb
+@@ -406,7 +406,7 @@ EOS
+ namespace qpid {
+ namespace framing {
+
+-class #{classname} #{inheritance} {
++class QPID_COMMON_CLASS_EXTERN #{classname} #{inheritance} {
+ EOS
+ if (is_packed(s))
+ indent { s.fields.each { |f| genl "#{f.cpptype.name} #{f.cppname};" unless f.type_ == "bit"} }
+diff --git a/qpid/cpp/src/CMakeLists.txt b/qpid/cpp/src/CMakeLists.txt
+index d0ca2d9..d4da276 100644
+--- a/qpid/cpp/src/CMakeLists.txt
++++ b/qpid/cpp/src/CMakeLists.txt
+@@ -636,8 +636,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL Windows)
+ )
+
+ set (qpidcommon_platform_LIBS
+- ${windows_ssl_libs} ws2_32
+- )
++ ${Boost_THREAD_LIBRARY} ${windows_ssl_libs} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ws2_32 )
+ set (qpidbroker_platform_SOURCES
+ qpid/broker/windows/BrokerDefaults.cpp
+ qpid/broker/windows/SaslAuthenticator.cpp
+@@ -938,7 +937,7 @@ if (NOT QPID_GENERATED_HEADERS_IN_SOURCE)
+ endif (NOT QPID_GENERATED_HEADERS_IN_SOURCE)
+
+
+-if (WIN32)
++if (_MSC_VER)
+ # Install the DtcPlugin project and call it qpidxarm.
+ set(AMQP_WCF_DIR ${qpid-cpp_SOURCE_DIR}/../wcf)
+ set(qpidxarm_SOURCES ${AMQP_WCF_DIR}/src/Apache/Qpid/DtcPlugin/DtcPlugin.cpp)
+@@ -951,7 +950,7 @@ if (WIN32)
+ COMPONENT ${QPID_COMPONENT_CLIENT})
+ install_pdb (qpidxarm ${QPID_COMPONENT_CLIENT})
+ endif (EXISTS ${qpidxarm_SOURCES})
+-endif (WIN32)
++endif (_MSC_VER)
+
+ set (qpidbroker_SOURCES
+ ${mgen_broker_cpp}
+@@ -1083,7 +1082,7 @@ install (TARGETS qmf OPTIONAL
+ COMPONENT ${QPID_COMPONENT_QMF})
+ install_pdb (qmf ${QPID_COMPONENT_QMF})
+
+-if(NOT WIN32)
++#if(NOT WIN32)
+ set (qmf2_HEADERS
+ ../include/qmf/AgentEvent.h
+ ../include/qmf/Agent.h
+@@ -1158,7 +1157,7 @@ if(NOT WIN32)
+ DESTINATION ${QPID_INSTALL_INCLUDEDIR}/qmf
+ COMPONENT ${QPID_COMPONENT_QMF})
+ install_pdb (qmf2 ${QPID_COMPONENT_QMF})
+-endif (NOT WIN32)
++#endif (NOT WIN32)
+
+ set (qmfengine_SOURCES
+ qmf/engine/Agent.cpp
+diff --git a/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h b/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
+index a87a1a1..b5b0fe5 100644
+--- a/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
++++ b/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.h
+@@ -41,8 +41,8 @@ namespace amqp_0_10 {
+ * to a session state.
+ */
+
+-class SessionHandler : public framing::AMQP_AllOperations::SessionHandler,
+- public framing::FrameHandler::InOutHandler
++class QPID_COMMON_CLASS_EXTERN SessionHandler : public framing::AMQP_AllOperations::SessionHandler,
++ public framing::FrameHandler::InOutHandler
+ {
+ public:
+ QPID_COMMON_EXTERN SessionHandler(framing::FrameHandler* out=0, uint16_t channel=0);
+diff --git a/qpid/cpp/src/qpid/broker/BrokerImportExport.h b/qpid/cpp/src/qpid/broker/BrokerImportExport.h
+index 4edf8c9..ee05788 100644
+--- a/qpid/cpp/src/qpid/broker/BrokerImportExport.h
++++ b/qpid/cpp/src/qpid/broker/BrokerImportExport.h
+@@ -20,14 +20,23 @@
+ * under the License.
+ */
+
+-#if defined(WIN32) && !defined(QPID_BROKER_STATIC)
+-#if defined(BROKER_EXPORT) || defined (qpidbroker_EXPORTS)
+-#define QPID_BROKER_EXTERN __declspec(dllexport)
++#if defined(WIN32) && !defined(QPID_DECLARE_STATIC)
++# if defined(BROKER_EXPORT) || defined (qpidbroker_EXPORTS)
++# define QPID_BROKER_EXTERN __declspec(dllexport)
++# else
++# define QPID_BROKER_EXTERN __declspec(dllimport)
++# endif
++# ifdef _MSC_VER
++# define QPID_BROKER_CLASS_EXTERN
++# define QPID_BROKER_INLINE_EXTERN QPID_BROKER_EXTERN
++# else
++# define QPID_BROKER_CLASS_EXTERN QPID_BROKER_EXTERN
++# define QPID_BROKER_INLINE_EXTERN
++# endif
+ #else
+-#define QPID_BROKER_EXTERN __declspec(dllimport)
+-#endif
+-#else
+-#define QPID_BROKER_EXTERN
++# define QPID_BROKER_EXTERN
++# define QPID_BROKER_CLASS_EXTERN
++# define QPID_BROKER_INLINE_EXTERN
+ #endif
+
+ #endif
+diff --git a/qpid/cpp/src/qpid/broker/DeliverableMessage.h b/qpid/cpp/src/qpid/broker/DeliverableMessage.h
+index ce613e7..c8d2100 100644
+--- a/qpid/cpp/src/qpid/broker/DeliverableMessage.h
++++ b/qpid/cpp/src/qpid/broker/DeliverableMessage.h
+@@ -29,7 +29,7 @@
+
+ namespace qpid {
+ namespace broker {
+- class DeliverableMessage : public Deliverable{
++ class QPID_BROKER_CLASS_EXTERN DeliverableMessage : public Deliverable{
+ boost::intrusive_ptr<Message> msg;
+ public:
+ QPID_BROKER_EXTERN DeliverableMessage(const boost::intrusive_ptr<Message>& msg);
+diff --git a/qpid/cpp/src/qpid/broker/Exchange.h b/qpid/cpp/src/qpid/broker/Exchange.h
+index 9c4e6be..09f33a7 100644
+--- a/qpid/cpp/src/qpid/broker/Exchange.h
++++ b/qpid/cpp/src/qpid/broker/Exchange.h
+@@ -39,7 +39,7 @@ namespace broker {
+ class Broker;
+ class ExchangeRegistry;
+
+-class Exchange : public PersistableExchange, public management::Manageable {
++class QPID_BROKER_CLASS_EXTERN Exchange : public PersistableExchange, public management::Manageable {
+ public:
+ struct Binding : public management::Manageable {
+ typedef boost::shared_ptr<Binding> shared_ptr;
+@@ -162,7 +162,7 @@ public:
+ Broker* broker = 0);
+ QPID_BROKER_EXTERN Exchange(const std::string& _name, bool _durable, const qpid::framing::FieldTable& _args,
+ management::Manageable* parent = 0, Broker* broker = 0);
+- QPID_BROKER_EXTERN virtual ~Exchange();
++ QPID_BROKER_INLINE_EXTERN virtual ~Exchange();
+
+ const std::string& getName() const { return name; }
+ bool isDurable() { return durable; }
+diff --git a/qpid/cpp/src/qpid/broker/ExpiryPolicy.h b/qpid/cpp/src/qpid/broker/ExpiryPolicy.h
+index 40e793b..a723eb0 100644
+--- a/qpid/cpp/src/qpid/broker/ExpiryPolicy.h
++++ b/qpid/cpp/src/qpid/broker/ExpiryPolicy.h
+@@ -33,7 +33,7 @@ class Message;
+ /**
+ * Default expiry policy.
+ */
+-class ExpiryPolicy : public RefCounted
++class QPID_BROKER_CLASS_EXTERN ExpiryPolicy : public RefCounted
+ {
+ public:
+ QPID_BROKER_EXTERN virtual ~ExpiryPolicy();
+diff --git a/qpid/cpp/src/qpid/broker/MessageBuilder.h b/qpid/cpp/src/qpid/broker/MessageBuilder.h
+index 75dfd67..b99b8ef 100644
+--- a/qpid/cpp/src/qpid/broker/MessageBuilder.h
++++ b/qpid/cpp/src/qpid/broker/MessageBuilder.h
+@@ -33,7 +33,7 @@ namespace qpid {
+ class Message;
+ class MessageStore;
+
+- class MessageBuilder : public framing::FrameHandler{
++ class QPID_BROKER_CLASS_EXTERN MessageBuilder : public framing::FrameHandler{
+ public:
+ QPID_BROKER_EXTERN MessageBuilder(MessageStore* const store);
+ QPID_BROKER_EXTERN void handle(framing::AMQFrame& frame);
+diff --git a/qpid/cpp/src/qpid/broker/NullMessageStore.h b/qpid/cpp/src/qpid/broker/NullMessageStore.h
+index e148ec4..a7453fa 100644
+--- a/qpid/cpp/src/qpid/broker/NullMessageStore.h
++++ b/qpid/cpp/src/qpid/broker/NullMessageStore.h
+@@ -34,7 +34,7 @@ namespace broker {
+ /**
+ * A null implementation of the MessageStore interface
+ */
+-class NullMessageStore : public MessageStore
++class QPID_BROKER_CLASS_EXTERN NullMessageStore : public MessageStore
+ {
+ std::set<std::string> prepared;
+ uint64_t nextPersistenceId;
+diff --git a/qpid/cpp/src/qpid/broker/PersistableMessage.h b/qpid/cpp/src/qpid/broker/PersistableMessage.h
+index e50b52c..d29c2c4 100644
+--- a/qpid/cpp/src/qpid/broker/PersistableMessage.h
++++ b/qpid/cpp/src/qpid/broker/PersistableMessage.h
+@@ -115,11 +115,11 @@ class PersistableMessage : public Persistable
+ virtual QPID_BROKER_EXTERN bool isPersistent() const = 0;
+
+ /** track the progress of a message received by the broker - see ingressCompletion above */
+- QPID_BROKER_EXTERN bool isIngressComplete() { return ingressCompletion.isDone(); }
+- QPID_BROKER_EXTERN AsyncCompletion& getIngressCompletion() { return ingressCompletion; }
++ QPID_BROKER_INLINE_EXTERN bool isIngressComplete() { return ingressCompletion.isDone(); }
++ QPID_BROKER_INLINE_EXTERN AsyncCompletion& getIngressCompletion() { return ingressCompletion; }
+
+- QPID_BROKER_EXTERN void enqueueStart() { ingressCompletion.startCompleter(); }
+- QPID_BROKER_EXTERN void enqueueComplete() { ingressCompletion.finishCompleter(); }
++ QPID_BROKER_INLINE_EXTERN void enqueueStart() { ingressCompletion.startCompleter(); }
++ QPID_BROKER_INLINE_EXTERN void enqueueComplete() { ingressCompletion.finishCompleter(); }
+
+ QPID_BROKER_EXTERN void enqueueAsync(PersistableQueue::shared_ptr queue,
+ MessageStore* _store);
+diff --git a/qpid/cpp/src/qpid/broker/QueueFlowLimit.h b/qpid/cpp/src/qpid/broker/QueueFlowLimit.h
+index 69d91df..6b9c54a 100644
+--- a/qpid/cpp/src/qpid/broker/QueueFlowLimit.h
++++ b/qpid/cpp/src/qpid/broker/QueueFlowLimit.h
+@@ -53,7 +53,7 @@ class Broker;
+ * passing _either_ level may turn flow control ON, but _both_ must be
+ * below level before flow control will be turned OFF.
+ */
+- class QueueFlowLimit : public QueueObserver
++ class QPID_BROKER_CLASS_EXTERN QueueFlowLimit : public QueueObserver
+ {
+ static uint64_t defaultMaxSize;
+ static uint defaultFlowStopRatio;
+diff --git a/qpid/cpp/src/qpid/broker/TopicExchange.h b/qpid/cpp/src/qpid/broker/TopicExchange.h
+index a6c457d..753c915 100644
+--- a/qpid/cpp/src/qpid/broker/TopicExchange.h
++++ b/qpid/cpp/src/qpid/broker/TopicExchange.h
+@@ -56,7 +56,7 @@ class TopicExchange : public virtual Exchange {
+ // | +-->d-->...
+ // +-->x-->y-->...
+ //
+- class BindingNode {
++ class QPID_BROKER_CLASS_EXTERN BindingNode {
+ public:
+
+ typedef boost::shared_ptr<BindingNode> shared_ptr;
+diff --git a/qpid/cpp/src/qpid/broker/TxPublish.h b/qpid/cpp/src/qpid/broker/TxPublish.h
+index effa585..f0b9c0a 100644
+--- a/qpid/cpp/src/qpid/broker/TxPublish.h
++++ b/qpid/cpp/src/qpid/broker/TxPublish.h
+@@ -45,7 +45,7 @@ namespace qpid {
+ * commit() the messages will be passed to the queue for
+ * dispatch or to be added to the in-memory queue.
+ */
+- class TxPublish : public TxOp, public Deliverable{
++ class QPID_BROKER_CLASS_EXTERN TxPublish : public TxOp, public Deliverable{
+
+ class Commit{
+ boost::intrusive_ptr<Message>& msg;
+diff --git a/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp b/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp
+index b6862f0..b65440b 100644
+--- a/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp
++++ b/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp
+@@ -31,10 +31,16 @@ const std::string Broker::Options::DEFAULT_DATA_DIR_NAME("\\QPIDD.DATA");
+ std::string
+ Broker::Options::getHome() {
+ std::string home;
++#ifdef _MSC_VER
+ char home_c[MAX_PATH+1];
+ size_t unused;
+ if (0 == getenv_s (&unused, home_c, sizeof(home_c), "HOME"))
+ home += home_c;
++#else
++ char *home_c = getenv("HOME");
++ if (home_c)
++ home += home_c;
++#endif
+ return home;
+ }
+
+diff --git a/qpid/cpp/src/qpid/broker/windows/SaslAuthenticator.cpp b/qpid/cpp/src/qpid/broker/windows/SaslAuthenticator.cpp
+index 608a8f7..962877a 100644
+--- a/qpid/cpp/src/qpid/broker/windows/SaslAuthenticator.cpp
++++ b/qpid/cpp/src/qpid/broker/windows/SaslAuthenticator.cpp
+@@ -159,8 +159,11 @@ void SspiAuthenticator::start(const string& mechanism, const string& response)
+ string::size_type j = response.find((char)0, i+1);
+ string uid = response.substr(i+1, j-1);
+ string pwd = response.substr(j+1);
++ string dot(".");
+ int error = 0;
+- if (!LogonUser(uid.c_str(), ".", pwd.c_str(),
++ if (!LogonUser(const_cast<char*>(uid.c_str()),
++ const_cast<char*>(dot.c_str()),
++ const_cast<char*>(pwd.c_str()),
+ LOGON32_LOGON_NETWORK,
+ LOGON32_PROVIDER_DEFAULT,
+ &userToken))
+@@ -176,7 +179,7 @@ void SspiAuthenticator::start(const string& mechanism, const string& response)
+ client.tune(framing::CHANNEL_MAX, connection.getFrameMax(), 0, 0);
+ }
+
+-void SspiAuthenticator::step(const string& response)
++void SspiAuthenticator::step(const string& /*response*/)
+ {
+ QPID_LOG(info, "SASL: Need another step!!!");
+ }
+diff --git a/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp b/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp
+index 63c7fa3..d1ae762 100644
+--- a/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp
++++ b/qpid/cpp/src/qpid/client/windows/SaslFactory.cpp
+@@ -153,7 +153,7 @@ std::string WindowsSasl::start(const std::string& mechanisms,
+ return resp;
+ }
+
+-std::string WindowsSasl::step(const std::string& challenge)
++std::string WindowsSasl::step(const std::string& /*challenge*/)
+ {
+ // Shouldn't get this for PLAIN...
+ throw InternalErrorException(QPID_MSG("Sasl step error"));
+@@ -169,7 +169,7 @@ std::string WindowsSasl::getUserId()
+ return std::string(); // TODO - when GSSAPI is supported, return userId for connection.
+ }
+
+-std::auto_ptr<SecurityLayer> WindowsSasl::getSecurityLayer(uint16_t maxFrameSize)
++std::auto_ptr<SecurityLayer> WindowsSasl::getSecurityLayer(uint16_t /*maxFrameSize*/)
+ {
+ return std::auto_ptr<SecurityLayer>(0);
+ }
+diff --git a/qpid/cpp/src/qpid/framing/AMQBody.h b/qpid/cpp/src/qpid/framing/AMQBody.h
+index 60ac2d3..56d1d25 100644
+--- a/qpid/cpp/src/qpid/framing/AMQBody.h
++++ b/qpid/cpp/src/qpid/framing/AMQBody.h
+@@ -46,7 +46,7 @@ struct AMQBodyConstVisitor {
+ virtual void visit(const AMQMethodBody&) = 0;
+ };
+
+-class AMQBody : public RefCounted {
++class QPID_COMMON_CLASS_EXTERN AMQBody : public RefCounted {
+ public:
+ AMQBody() {}
+ QPID_COMMON_EXTERN virtual ~AMQBody();
+diff --git a/qpid/cpp/src/qpid/framing/AMQContentBody.h b/qpid/cpp/src/qpid/framing/AMQContentBody.h
+index 69813b2..e25451e 100644
+--- a/qpid/cpp/src/qpid/framing/AMQContentBody.h
++++ b/qpid/cpp/src/qpid/framing/AMQContentBody.h
+@@ -29,7 +29,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQContentBody : public AMQBody
++class QPID_COMMON_CLASS_EXTERN AMQContentBody : public AMQBody
+ {
+ string data;
+
+@@ -37,15 +37,15 @@ public:
+ QPID_COMMON_EXTERN AMQContentBody();
+ QPID_COMMON_EXTERN AMQContentBody(const string& data);
+ inline virtual ~AMQContentBody(){}
+- QPID_COMMON_EXTERN inline uint8_t type() const { return CONTENT_BODY; };
+- QPID_COMMON_EXTERN inline const string& getData() const { return data; }
+- QPID_COMMON_EXTERN inline string& getData() { return data; }
++ inline uint8_t type() const { return CONTENT_BODY; };
++ inline const string& getData() const { return data; }
++ inline string& getData() { return data; }
+ QPID_COMMON_EXTERN uint32_t encodedSize() const;
+ QPID_COMMON_EXTERN void encode(Buffer& buffer) const;
+ QPID_COMMON_EXTERN void decode(Buffer& buffer, uint32_t size);
+ QPID_COMMON_EXTERN void print(std::ostream& out) const;
+- QPID_COMMON_EXTERN void accept(AMQBodyConstVisitor& v) const { v.visit(*this); }
+- QPID_COMMON_EXTERN boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); }
++ void accept(AMQBodyConstVisitor& v) const { v.visit(*this); }
++ boost::intrusive_ptr<AMQBody> clone() const { return BodyFactory::copy(*this); }
+ };
+
+ }
+diff --git a/qpid/cpp/src/qpid/framing/AMQFrame.h b/qpid/cpp/src/qpid/framing/AMQFrame.h
+index d7b04f0..c669d12 100644
+--- a/qpid/cpp/src/qpid/framing/AMQFrame.h
++++ b/qpid/cpp/src/qpid/framing/AMQFrame.h
+@@ -33,7 +33,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQFrame : public AMQDataBlock
++class QPID_COMMON_CLASS_EXTERN AMQFrame : public AMQDataBlock
+ {
+ public:
+ QPID_COMMON_EXTERN AMQFrame(const boost::intrusive_ptr<AMQBody>& b=0);
+diff --git a/qpid/cpp/src/qpid/framing/AMQHeaderBody.h b/qpid/cpp/src/qpid/framing/AMQHeaderBody.h
+index 8d96e35..a8c3269 100644
+--- a/qpid/cpp/src/qpid/framing/AMQHeaderBody.h
++++ b/qpid/cpp/src/qpid/framing/AMQHeaderBody.h
+@@ -35,7 +35,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQHeaderBody : public AMQBody
++class QPID_COMMON_CLASS_EXTERN AMQHeaderBody : public AMQBody
+ {
+ template <class T> struct OptProps { boost::optional<T> props; };
+ template <class Base, class T>
+diff --git a/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h b/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h
+index 9b1fe8a..19ac2be 100644
+--- a/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h
++++ b/qpid/cpp/src/qpid/framing/AMQHeartbeatBody.h
+@@ -29,7 +29,7 @@
+ namespace qpid {
+ namespace framing {
+
+-class AMQHeartbeatBody : public AMQBody
++class QPID_COMMON_CLASS_EXTERN AMQHeartbeatBody : public AMQBody
+ {
+ public:
+ QPID_COMMON_EXTERN virtual ~AMQHeartbeatBody();
+diff --git a/qpid/cpp/src/qpid/framing/TransferContent.h b/qpid/cpp/src/qpid/framing/TransferContent.h
+index 5fe1a51..9a698a1 100644
+--- a/qpid/cpp/src/qpid/framing/TransferContent.h
++++ b/qpid/cpp/src/qpid/framing/TransferContent.h
+@@ -32,7 +32,7 @@ namespace qpid {
+ namespace framing {
+
+ /** Message content */
+-class TransferContent : public MethodContent
++class QPID_COMMON_CLASS_EXTERN TransferContent : public MethodContent
+ {
+ AMQHeaderBody header;
+ std::string data;
+diff --git a/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp b/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp
+index 28f4b26..0c74bea 100644
+--- a/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp
++++ b/qpid/cpp/src/qpid/log/windows/SinkOptions.cpp
+@@ -53,7 +53,7 @@ static int eventTypes[qpid::log::LevelTraits::COUNT] = {
+
+ class EventLogOutput : public qpid::log::Logger::Output {
+ public:
+- EventLogOutput(const std::string& sourceName) : logHandle(0)
++ EventLogOutput(const std::string& /*sourceName*/) : logHandle(0)
+ {
+ logHandle = OpenEventLog(0, "Application");
+ }
+@@ -83,7 +83,7 @@ private:
+ HANDLE logHandle;
+ };
+
+-SinkOptions::SinkOptions(const std::string& argv0)
++SinkOptions::SinkOptions(const std::string& /*argv0*/)
+ : qpid::log::SinkOptions(),
+ logToStderr(true),
+ logToStdout(false),
+diff --git a/qpid/cpp/src/qpid/log/windows/SinkOptions.h b/qpid/cpp/src/qpid/log/windows/SinkOptions.h
+index 605822f..f270c50 100644
+--- a/qpid/cpp/src/qpid/log/windows/SinkOptions.h
++++ b/qpid/cpp/src/qpid/log/windows/SinkOptions.h
+@@ -26,7 +26,7 @@ namespace qpid {
+ namespace log {
+ namespace windows {
+
+-struct SinkOptions : public qpid::log::SinkOptions {
++struct QPID_COMMON_CLASS_EXTERN SinkOptions : public qpid::log::SinkOptions {
+ QPID_COMMON_EXTERN SinkOptions(const std::string& argv0);
+ virtual ~SinkOptions() {}
+
+diff --git a/qpid/cpp/src/qpid/messaging/AddressParser.h b/qpid/cpp/src/qpid/messaging/AddressParser.h
+index 1635331..c51200c 100644
+--- a/qpid/cpp/src/qpid/messaging/AddressParser.h
++++ b/qpid/cpp/src/qpid/messaging/AddressParser.h
+@@ -26,13 +26,13 @@
+ namespace qpid {
+ namespace messaging {
+
+-class AddressParser
++class QPID_MESSAGING_CLASS_EXTERN AddressParser
+ {
+ public:
+- AddressParser(const std::string&);
+- bool parse(Address& address);
+- bool parseMap(qpid::types::Variant::Map& map);
+- bool parseList(qpid::types::Variant::List& list);
++ QPID_MESSAGING_EXTERN AddressParser(const std::string&);
++ QPID_MESSAGING_EXTERN bool parse(Address& address);
++ QPID_MESSAGING_EXTERN bool parseMap(qpid::types::Variant::Map& map);
++ QPID_MESSAGING_EXTERN bool parseList(qpid::types::Variant::List& list);
+ private:
+ const std::string& input;
+ std::string::size_type current;
+diff --git a/qpid/cpp/src/qpid/sys/AggregateOutput.h b/qpid/cpp/src/qpid/sys/AggregateOutput.h
+index 6dad998..d7c0ff2 100644
+--- a/qpid/cpp/src/qpid/sys/AggregateOutput.h
++++ b/qpid/cpp/src/qpid/sys/AggregateOutput.h
+@@ -41,7 +41,7 @@ namespace sys {
+ * doOutput is called in another.
+ */
+
+-class AggregateOutput : public OutputTask, public OutputControl
++class QPID_COMMON_CLASS_EXTERN AggregateOutput : public OutputTask, public OutputControl
+ {
+ typedef std::deque<OutputTask*> TaskList;
+
+diff --git a/qpid/cpp/src/qpid/sys/AsynchIOHandler.h b/qpid/cpp/src/qpid/sys/AsynchIOHandler.h
+index e1885ba..b986760 100644
+--- a/qpid/cpp/src/qpid/sys/AsynchIOHandler.h
++++ b/qpid/cpp/src/qpid/sys/AsynchIOHandler.h
+@@ -57,7 +57,7 @@ class AsynchIOHandler : public OutputControl {
+ QPID_COMMON_EXTERN ~AsynchIOHandler();
+ QPID_COMMON_EXTERN void init(AsynchIO* a, int numBuffs);
+
+- QPID_COMMON_EXTERN void setClient() { isClient = true; }
++ QPID_COMMON_INLINE_EXTERN void setClient() { isClient = true; }
+
+ // Output side
+ QPID_COMMON_EXTERN void abort();
+diff --git a/qpid/cpp/src/qpid/sys/ClusterSafe.h b/qpid/cpp/src/qpid/sys/ClusterSafe.h
+index 27e4eb4..434e0a5 100644
+--- a/qpid/cpp/src/qpid/sys/ClusterSafe.h
++++ b/qpid/cpp/src/qpid/sys/ClusterSafe.h
+@@ -56,10 +56,10 @@ QPID_COMMON_EXTERN bool isClusterSafe();
+ * Mark a scope as cluster safe. Sets isClusterSafe in constructor and resets
+ * to previous value in destructor.
+ */
+-class ClusterSafeScope {
++class QPID_COMMON_CLASS_EXTERN ClusterSafeScope {
+ public:
+- ClusterSafeScope();
+- ~ClusterSafeScope();
++ QPID_COMMON_EXTERN ClusterSafeScope();
++ QPID_COMMON_EXTERN ~ClusterSafeScope();
+ private:
+ bool save;
+ };
+@@ -68,7 +68,7 @@ class ClusterSafeScope {
+ * Mark a scope as cluster unsafe. Clears isClusterSafe in constructor and resets
+ * to previous value in destructor.
+ */
+-class ClusterUnsafeScope {
++class QPID_COMMON_CLASS_EXTERN ClusterUnsafeScope {
+ public:
+ QPID_COMMON_EXTERN ClusterUnsafeScope();
+ QPID_COMMON_EXTERN ~ClusterUnsafeScope();
+diff --git a/qpid/cpp/src/qpid/sys/Poller.h b/qpid/cpp/src/qpid/sys/Poller.h
+index ec53b79..01ee139 100644
+--- a/qpid/cpp/src/qpid/sys/Poller.h
++++ b/qpid/cpp/src/qpid/sys/Poller.h
+@@ -120,7 +120,7 @@ class PollerHandle {
+ friend struct Poller::Event;
+
+ PollerHandlePrivate* const impl;
+- QPID_COMMON_EXTERN virtual void processEvent(Poller::EventType) {};
++ QPID_COMMON_INLINE_EXTERN virtual void processEvent(Poller::EventType) {};
+
+ public:
+ QPID_COMMON_EXTERN PollerHandle(const IOHandle& h);
+diff --git a/qpid/cpp/src/qpid/sys/Socket.h b/qpid/cpp/src/qpid/sys/Socket.h
+index 7d50afc..b1cded1 100644
+--- a/qpid/cpp/src/qpid/sys/Socket.h
++++ b/qpid/cpp/src/qpid/sys/Socket.h
+@@ -33,7 +33,7 @@ namespace sys {
+ class Duration;
+ class SocketAddress;
+
+-class Socket : public IOHandle
++class QPID_COMMON_CLASS_EXTERN Socket : public IOHandle
+ {
+ public:
+ /** Create a socket wrapper for descriptor. */
+@@ -84,7 +84,7 @@ public:
+ /**
+ * Returns the full address of the connection: local and remote host and port.
+ */
+- QPID_COMMON_EXTERN std::string getFullAddress() const { return getLocalAddress()+"-"+getPeerAddress(); }
++ QPID_COMMON_INLINE_EXTERN std::string getFullAddress() const { return getLocalAddress()+"-"+getPeerAddress(); }
+
+ QPID_COMMON_EXTERN uint16_t getLocalPort() const;
+ uint16_t getRemotePort() const;
+diff --git a/qpid/cpp/src/qpid/sys/alloca.h b/qpid/cpp/src/qpid/sys/alloca.h
+index e989670..0f58920 100644
+--- a/qpid/cpp/src/qpid/sys/alloca.h
++++ b/qpid/cpp/src/qpid/sys/alloca.h
+@@ -21,19 +21,22 @@
+ *
+ */
+
+-#if (defined(_WINDOWS) || defined (WIN32)) && defined(_MSC_VER)
+-#include <malloc.h>
+-#ifdef alloc
+-# undef alloc
+-#endif
+-#define alloc _alloc
+-#ifdef alloca
+-# undef alloca
+-#endif
+-#define alloca _alloca
+-#endif
+-#if !defined _WINDOWS && !defined WIN32
+-#include <alloca.h>
++#if (defined(_WINDOWS) || defined (WIN32))
++# include <malloc.h>
++
++# if defined(_MSC_VER)
++# ifdef alloc
++# undef alloc
++# endif
++# define alloc _alloc
++# ifdef alloca
++# undef alloca
++# endif
++# define alloca _alloca
++# endif
++# if !defined _WINDOWS && !defined WIN32
++# include <alloca.h>
++# endif
+ #endif
+
+ #endif /*!QPID_SYS_ALLOCA_H*/
+diff --git a/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp b/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
+index 38d8842..e1d8f52 100644
+--- a/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
+@@ -37,12 +37,12 @@
+ #include <winsock2.h>
+ #include <mswsock.h>
+ #include <windows.h>
+-
++#include "mingw32_compat.h"
+ #include <boost/bind.hpp>
+
+ namespace {
+
+- typedef qpid::sys::ScopedLock<qpid::sys::Mutex> QLock;
++typedef qpid::sys::ScopedLock<qpid::sys::Mutex> QLock;
+
+ /*
+ * The function pointers for AcceptEx and ConnectEx need to be looked up
+@@ -114,7 +114,8 @@ AsynchAcceptor::~AsynchAcceptor()
+ }
+
+ void AsynchAcceptor::start(Poller::shared_ptr poller) {
+- poller->monitorHandle(PollerHandle(socket), Poller::INPUT);
++ PollerHandle ph = PollerHandle(socket);
++ poller->monitorHandle(ph, Poller::INPUT);
+ restart ();
+ }
+
+@@ -154,7 +155,7 @@ void AsynchAcceptResult::success(size_t /*bytesTransferred*/) {
+ delete this;
+ }
+
+-void AsynchAcceptResult::failure(int status) {
++void AsynchAcceptResult::failure(int /*status*/) {
+ //if (status != WSA_OPERATION_ABORTED)
+ // Can there be anything else? ;
+ delete this;
+@@ -410,8 +411,9 @@ void AsynchIO::queueForDeletion() {
+ }
+
+ void AsynchIO::start(Poller::shared_ptr poller0) {
++ PollerHandle ph = PollerHandle(socket);
+ poller = poller0;
+- poller->monitorHandle(PollerHandle(socket), Poller::INPUT);
++ poller->monitorHandle(ph, Poller::INPUT);
+ if (writeQueue.size() > 0) // Already have data queued for write
+ notifyPendingWrite();
+ startReading();
+@@ -584,7 +586,6 @@ void AsynchIO::notifyIdle(void) {
+ void AsynchIO::startWrite(AsynchIO::BufferBase* buff) {
+ writeInProgress = true;
+ InterlockedIncrement(&opsInProgress);
+- int writeCount = buff->byteCount-buff->dataCount;
+ AsynchWriteResult *result =
+ new AsynchWriteResult(boost::bind(&AsynchIO::completion, this, _1),
+ buff,
+diff --git a/qpid/cpp/src/qpid/sys/windows/AsynchIoResult.h b/qpid/cpp/src/qpid/sys/windows/AsynchIoResult.h
+index 66c89ef..b113249 100755
+--- a/qpid/cpp/src/qpid/sys/windows/AsynchIoResult.h
++++ b/qpid/cpp/src/qpid/sys/windows/AsynchIoResult.h
+@@ -98,7 +98,7 @@ private:
+ // AcceptEx needs a place to write the local and remote addresses
+ // when accepting the connection. Place those here; get enough for
+ // IPv6 addresses, even if the socket is IPv4.
+- enum { SOCKADDRMAXLEN = sizeof sockaddr_in6 + 16,
++ enum { SOCKADDRMAXLEN = sizeof(sockaddr_in6) + 16,
+ SOCKADDRBUFLEN = 2 * SOCKADDRMAXLEN };
+ char addressBuffer[SOCKADDRBUFLEN];
+ };
+diff --git a/qpid/cpp/src/qpid/sys/windows/IocpPoller.cpp b/qpid/cpp/src/qpid/sys/windows/IocpPoller.cpp
+index d326ab0..1805dd2 100755
+--- a/qpid/cpp/src/qpid/sys/windows/IocpPoller.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/IocpPoller.cpp
+@@ -152,9 +152,9 @@ void Poller::monitorHandle(PollerHandle& handle, Direction dir) {
+ }
+
+ // All no-ops...
+-void Poller::unmonitorHandle(PollerHandle& handle, Direction dir) {}
+-void Poller::registerHandle(PollerHandle& handle) {}
+-void Poller::unregisterHandle(PollerHandle& handle) {}
++void Poller::unmonitorHandle(PollerHandle& /*handle*/, Direction /*dir*/) {}
++void Poller::registerHandle(PollerHandle& /*handle*/) {}
++void Poller::unregisterHandle(PollerHandle& /*handle*/) {}
+
+ Poller::Event Poller::wait(Duration timeout) {
+ DWORD timeoutMs = 0;
+diff --git a/qpid/cpp/src/qpid/sys/windows/Shlib.cpp b/qpid/cpp/src/qpid/sys/windows/Shlib.cpp
+index 38027de..ba18747 100644
+--- a/qpid/cpp/src/qpid/sys/windows/Shlib.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/Shlib.cpp
+@@ -44,7 +44,8 @@ void Shlib::unload() {
+ }
+
+ void* Shlib::getSymbol(const char* name) {
+- void* sym = GetProcAddress(static_cast<HMODULE>(handle), name);
++ // Double cast avoids warning about casting function pointer to object
++ void *sym = reinterpret_cast<void*>(reinterpret_cast<intptr_t>(GetProcAddress(static_cast<HMODULE>(handle), name)));
+ if (sym == NULL)
+ throw QPID_WINDOWS_ERROR(GetLastError());
+ return sym;
+diff --git a/qpid/cpp/src/qpid/sys/windows/Socket.cpp b/qpid/cpp/src/qpid/sys/windows/Socket.cpp
+index 11fb8b4..2ce274a 100755
+--- a/qpid/cpp/src/qpid/sys/windows/Socket.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/Socket.cpp
+@@ -19,6 +19,11 @@
+ *
+ */
+
++// Ensure we get all of winsock2.h
++#ifndef _WIN32_WINNT
++#define _WIN32_WINNT 0x0501
++#endif
++
+ #include "qpid/sys/Socket.h"
+ #include "qpid/sys/SocketAddress.h"
+ #include "qpid/sys/windows/IoHandlePrivate.h"
+diff --git a/qpid/cpp/src/qpid/sys/windows/SocketAddress.cpp b/qpid/cpp/src/qpid/sys/windows/SocketAddress.cpp
+index 501cff1..5efdad0 100644
+--- a/qpid/cpp/src/qpid/sys/windows/SocketAddress.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/SocketAddress.cpp
+@@ -19,6 +19,11 @@
+ *
+ */
+
++// Ensure we get all of winsock2.h
++#ifndef _WIN32_WINNT
++#define _WIN32_WINNT 0x0501
++#endif
++
+ #include "qpid/sys/SocketAddress.h"
+
+ #include "qpid/sys/windows/check.h"
+diff --git a/qpid/cpp/src/qpid/sys/windows/StrError.cpp b/qpid/cpp/src/qpid/sys/windows/StrError.cpp
+index 9c1bfcd..546d399 100755
+--- a/qpid/cpp/src/qpid/sys/windows/StrError.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/StrError.cpp
+@@ -30,6 +30,7 @@ namespace sys {
+ std::string strError(int err) {
+ const size_t bufsize = 512;
+ char buf[bufsize];
++ buf[0] = 0;
+ if (0 == FormatMessage (FORMAT_MESSAGE_MAX_WIDTH_MASK
+ | FORMAT_MESSAGE_FROM_SYSTEM,
+ 0,
+@@ -39,7 +40,11 @@ std::string strError(int err) {
+ bufsize,
+ 0))
+ {
+- strerror_s (buf, bufsize, err);
++#ifdef _MSC_VER
++ strerror_s(buf, bufsize, err);
++#else
++ return std::string(strerror(err));
++#endif
+ }
+ return std::string(buf);
+ }
+diff --git a/qpid/cpp/src/qpid/sys/windows/Time.cpp b/qpid/cpp/src/qpid/sys/windows/Time.cpp
+index 16d09fc..1e03d78 100644
+--- a/qpid/cpp/src/qpid/sys/windows/Time.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/Time.cpp
+@@ -91,7 +91,11 @@ void outputFormattedNow(std::ostream& o) {
+ char time_string[100];
+
+ ::time( &rawtime );
++#ifdef _MSC_VER
+ ::localtime_s(&timeinfo, &rawtime);
++#else
++ timeinfo = *(::localtime(&rawtime));
++#endif
+ ::strftime(time_string, 100,
+ "%Y-%m-%d %H:%M:%S",
+ &timeinfo);
+diff --git a/qpid/cpp/src/qpid/sys/windows/mingw32_compat.h b/qpid/cpp/src/qpid/sys/windows/mingw32_compat.h
+new file mode 100644
+index 0000000..51f613c
+--- /dev/null
++++ b/qpid/cpp/src/qpid/sys/windows/mingw32_compat.h
+@@ -0,0 +1,39 @@
++#ifndef _sys_windows_mingw32_compat
++#define _sys_windows_mingw32_compat
++/*
++ *
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements. See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership. The ASF licenses this file
++ * to you under the Apache License, Version 2.0 (the
++ * "License"); you may not use this file except in compliance
++ * with the License. You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing,
++ * software distributed under the License is distributed on an
++ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++ * KIND, either express or implied. See the License for the
++ * specific language governing permissions and limitations
++ * under the License.
++ *
++ */
++
++#ifdef WIN32
++#ifndef _MSC_VER
++
++//
++// The following definitions for extension function GUIDs and signatures are taken from
++// MswSock.h in the Windows32 SDK. These rightfully belong in the mingw32 version of
++// mswsock.h, but are not included presently.
++//
++
++#define WSAID_ACCEPTEX {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
++typedef BOOL (PASCAL *LPFN_ACCEPTEX)(SOCKET,SOCKET,PVOID,DWORD,DWORD,DWORD,LPDWORD,LPOVERLAPPED);
++
++#endif
++#endif
++
++#endif
+diff --git a/qpid/cpp/src/qpid/sys/windows/uuid.cpp b/qpid/cpp/src/qpid/sys/windows/uuid.cpp
+index b536062..3316ecb 100644
+--- a/qpid/cpp/src/qpid/sys/windows/uuid.cpp
++++ b/qpid/cpp/src/qpid/sys/windows/uuid.cpp
+@@ -19,7 +19,7 @@
+ *
+ */
+
+-#include <Rpc.h>
++#include <rpc.h>
+ #ifdef uuid_t /* Done in rpcdce.h */
+ # undef uuid_t
+ #endif
+@@ -52,7 +52,11 @@ int uuid_parse (const char *in, uuid_t uu) {
+ void uuid_unparse (const uuid_t uu, char *out) {
+ unsigned char *formatted;
+ if (UuidToString((UUID*)uu, &formatted) == RPC_S_OK) {
++#ifdef _MSC_VER
+ strncpy_s (out, 36+1, (char*)formatted, _TRUNCATE);
++#else
++ strncpy (out, (char*)formatted, 36+1);
++#endif
+ RpcStringFree(&formatted);
+ }
+ }
+diff --git a/qpid/cpp/src/qpid/types/Variant.cpp b/qpid/cpp/src/qpid/types/Variant.cpp
+index 9cc3cfe..116f4b2 100644
+--- a/qpid/cpp/src/qpid/types/Variant.cpp
++++ b/qpid/cpp/src/qpid/types/Variant.cpp
+@@ -369,11 +369,11 @@ int8_t VariantImpl::asInt8() const
+ return int8_t(value.ui16);
+ break;
+ case VAR_UINT32:
+- if (value.ui32 <= (uint) std::numeric_limits<int8_t>::max())
++ if (value.ui32 <= (uint32_t) std::numeric_limits<int8_t>::max())
+ return int8_t(value.ui32);
+ break;
+ case VAR_UINT64:
+- if (value.ui64 <= (uint) std::numeric_limits<int8_t>::max())
++ if (value.ui64 <= (uint64_t) std::numeric_limits<int8_t>::max())
+ return int8_t(value.ui64);
+ break;
+ case VAR_STRING: return convertFromString<int8_t>();
+@@ -400,11 +400,11 @@ int16_t VariantImpl::asInt16() const
+ return int16_t(value.ui16);
+ break;
+ case VAR_UINT32:
+- if (value.ui32 <= (uint) std::numeric_limits<int16_t>::max())
++ if (value.ui32 <= (uint32_t) std::numeric_limits<int16_t>::max())
+ return int16_t(value.ui32);
+ break;
+ case VAR_UINT64:
+- if (value.ui64 <= (uint) std::numeric_limits<int16_t>::max())
++ if (value.ui64 <= (uint64_t) std::numeric_limits<int16_t>::max())
+ return int16_t(value.ui64);
+ break;
+ case VAR_STRING: return convertFromString<int16_t>();
+@@ -429,7 +429,7 @@ int32_t VariantImpl::asInt32() const
+ return int32_t(value.ui32);
+ break;
+ case VAR_UINT64:
+- if (value.ui64 <= (uint32_t) std::numeric_limits<int32_t>::max())
++ if (value.ui64 <= (uint64_t) std::numeric_limits<int32_t>::max())
+ return int32_t(value.ui64);
+ break;
+ case VAR_STRING: return convertFromString<int32_t>();
+diff --git a/qpid/cpp/src/tests/TimerTest.cpp b/qpid/cpp/src/tests/TimerTest.cpp
+index 7df9416..6a0a196 100644
+--- a/qpid/cpp/src/tests/TimerTest.cpp
++++ b/qpid/cpp/src/tests/TimerTest.cpp
+@@ -77,8 +77,10 @@ class TestTask : public TimerTask
+ BOOST_CHECK(fired);
+ BOOST_CHECK_EQUAL(expected_position, position);
+ Duration actual(start, end);
+-#ifdef _WIN32
++#ifdef _MSC_VER
+ uint64_t difference = _abs64(expected - actual);
++#elif defined(_WIN32)
++ uint64_t difference = labs(expected - actual);
+ #else
+ uint64_t difference = abs(expected - actual);
+ #endif
+diff --git a/qpid/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp b/qpid/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp
+index a0b665d..024f20b 100644
+--- a/qpid/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp
++++ b/qpid/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp
+@@ -26,7 +26,9 @@
+ // include this file with the executable being built. If the default
+ // behaviors are desired, don't include this file in the build.
+
++#if defined(_MSC_VER)
+ #include <crtdbg.h>
++#endif
+ #include <windows.h>
+ #include <iostream>
+
+@@ -53,12 +55,14 @@ static redirect_errors_to_stderr block;
+
+ redirect_errors_to_stderr::redirect_errors_to_stderr()
+ {
++#if defined(_MSC_VER)
+ _CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile (_CRT_WARN, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile (_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_FILE);
+ _CrtSetReportFile (_CRT_ASSERT, _CRTDBG_FILE_STDERR);
++#endif
+
+ // Prevent the system from displaying the critical-error-handler
+ // and can't-open-file message boxes.
+diff --git a/qpid/cpp/src/windows/QpiddBroker.cpp b/qpid/cpp/src/windows/QpiddBroker.cpp
+index e221551..50bb459 100644
+--- a/qpid/cpp/src/windows/QpiddBroker.cpp
++++ b/qpid/cpp/src/windows/QpiddBroker.cpp
+@@ -155,7 +155,7 @@ NamedSharedMemory<T>::NamedSharedMemory(const std::string& n) :
+ name(n),
+ memory(NULL),
+ data(0)
+-{};
++{}
+
+ template <typename T>
+ NamedSharedMemory<T>::~NamedSharedMemory() {
+@@ -163,7 +163,7 @@ NamedSharedMemory<T>::~NamedSharedMemory() {
+ ::UnmapViewOfFile(data);
+ if (memory != NULL)
+ ::CloseHandle(memory);
+-};
++}
+
+ template <typename T>
+ T& NamedSharedMemory<T>::create() {
diff --git a/sources b/sources
index 6ff2d81..ae7c138 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-0184fef44ae9ca859bb4ef9ee22d5e1c qpid-0.8.tar.gz
+75f7e1076fddc08baaee386f9af61897 qpid-0.10.tar.gz
More information about the scm-commits
mailing list