aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-04-22 20:06:20 +0000
committerGravatar kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-04-22 20:06:20 +0000
commit709ea28f3264aa5632e5577a4080671173fc6166 (patch)
treeebb91c2bdf45990cec0829ecf137eef69e130666
parent6f9bc71ffdf84d7cb0288112970659a94a2f13ae (diff)
Work around windows.h #defining GetMessage().
-rw-r--r--src/google/protobuf/message.h18
-rw-r--r--src/google/protobuf/test_util.cc6
-rw-r--r--src/google/protobuf/testing/googletest.h1
3 files changed, 25 insertions, 0 deletions
diff --git a/src/google/protobuf/message.h b/src/google/protobuf/message.h
index 0674a12c..b4209026 100644
--- a/src/google/protobuf/message.h
+++ b/src/google/protobuf/message.h
@@ -117,6 +117,24 @@
#else
#include <iosfwd>
#endif
+
+#if defined(_WIN32) && defined(GetMessage)
+// windows.h defines GetMessage() as a macro. Let's re-define it as an inline
+// function. This is necessary because Reflection has a method called
+// GetMessage() which we don't want overridden. The inline function should be
+// equivalent for C++ users.
+inline BOOL GetMessage_Win32(
+ LPMSG lpMsg, HWND hWnd,
+ UINT wMsgFilterMin, UINT wMsgFilterMax) {
+ return GetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
+}
+#undef GetMessage
+inline BOOL GetMessage(
+ LPMSG lpMsg, HWND hWnd,
+ UINT wMsgFilterMin, UINT wMsgFilterMax) {
+ return GetMessage_Win32(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
+}
+#endif
#include <google/protobuf/stubs/common.h>
diff --git a/src/google/protobuf/test_util.cc b/src/google/protobuf/test_util.cc
index c1e9fa78..60413f6d 100644
--- a/src/google/protobuf/test_util.cc
+++ b/src/google/protobuf/test_util.cc
@@ -32,6 +32,12 @@
// Based on original Protocol Buffers design by
// Sanjay Ghemawat, Jeff Dean, and others.
+#ifdef _WIN32
+// Verify that #icnluding windows.h does not break anything (e.g. because
+// windows.h #defines GetMessage() as a macro).
+#include <windows.h>
+#endif
+
#include <google/protobuf/test_util.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/message.h>
diff --git a/src/google/protobuf/testing/googletest.h b/src/google/protobuf/testing/googletest.h
index 0cb139cd..71444c96 100644
--- a/src/google/protobuf/testing/googletest.h
+++ b/src/google/protobuf/testing/googletest.h
@@ -58,6 +58,7 @@ string GetCapturedTestStderr();
// For use with ScopedMemoryLog::GetMessages(). Inside Google the LogLevel
// constants don't have the LOGLEVEL_ prefix, so the code that used
// ScopedMemoryLog refers to LOGLEVEL_ERROR as just ERROR.
+#undef ERROR // defend against promiscuous windows.h
static const LogLevel ERROR = LOGLEVEL_ERROR;
// Receives copies of all LOG(ERROR) messages while in scope. Sample usage: