Catch exceptions by reference

We use polymorphic exception objects, so catching by value invokes
the copy constructor and stuff that we don't really want.
diff --git a/win/rfb_win32/Dialog.cxx b/win/rfb_win32/Dialog.cxx
index c6f303c..c9e333d 100644
--- a/win/rfb_win32/Dialog.cxx
+++ b/win/rfb_win32/Dialog.cxx
@@ -344,7 +344,7 @@
     delete [] hpages; hpages = 0;
 
     return true;
-  } catch (rdr::Exception) {
+  } catch (rdr::Exception&) {
     alreadyShowing = false;
 
     std::list<PropSheetPage*>::iterator pspi;
diff --git a/win/rfb_win32/Registry.cxx b/win/rfb_win32/Registry.cxx
index afbdd06..963a36a 100644
--- a/win/rfb_win32/Registry.cxx
+++ b/win/rfb_win32/Registry.cxx
@@ -164,7 +164,7 @@
 TCHAR* RegKey::getString(const TCHAR* valname, const TCHAR* def) const {
   try {
     return getString(valname);
-  } catch(rdr::Exception) {
+  } catch(rdr::Exception&) {
     return tstrDup(def);
   }
 }
@@ -177,7 +177,7 @@
 void RegKey::getBinary(const TCHAR* valname, void** data, int* length, void* def, int deflen) const {
   try {
     getBinary(valname, data, length);
-  } catch(rdr::Exception) {
+  } catch(rdr::Exception&) {
     if (deflen) {
       *data = new char[deflen];
       memcpy(*data, def, deflen);
@@ -194,7 +194,7 @@
 int RegKey::getInt(const TCHAR* valname, int def) const {
   try {
     return getInt(valname);
-  } catch(rdr::Exception) {
+  } catch(rdr::Exception&) {
     return def;
   }
 }
@@ -269,7 +269,7 @@
   try {
     TCharArray tmp(getRepresentation(valname));
     return true;
-  } catch(rdr::Exception) {
+  } catch(rdr::Exception&) {
     return false;
   }
 }