diff -urpN tcl8.5.8/win/tclWin32Dll.c tcl8.5.8-mingw64-fix/win/tclWin32Dll.c
--- tcl8.5.8/win/tclWin32Dll.c	2009-07-01 16:05:19 +0200
+++ tcl8.5.8-mingw64-fix/win/tclWin32Dll.c	2010-09-05 19:44:10 +0200
@@ -319,7 +319,9 @@ DllMain(
 	 * an exception handler and the state of the stack might be unstable.
 	 */
 
-#ifdef HAVE_NO_SEH
+#if defined(_WIN64) && defined(HAVE_NO_SEH)
+	    Tcl_Finalize();
+#elif !defined(HAVE_NO_SEH)
 	__asm__ __volatile__ (
 
 	    /*
diff -urpN tcl8.5.8/win/tclWinChan.c tcl8.5.8-mingw64-fix/win/tclWinChan.c
--- tcl8.5.8/win/tclWinChan.c	2008-05-23 23:10:45 +0200
+++ tcl8.5.8-mingw64-fix/win/tclWinChan.c	2010-09-05 19:33:01 +0200
@@ -1094,7 +1094,10 @@ Tcl_MakeFileChannel(
 	 */
 
 	result = 0;
-#ifndef HAVE_NO_SEH
+#if defined(_WIN64) && defined(HAVE_NO_SEH)
+	    CloseHandle(dupedHandle);
+	    result = 1;
+#elif !defined(HAVE_NO_SEH)
 	__try {
 	    CloseHandle(dupedHandle);
 	    result = 1;
diff -urpN tcl8.5.8/win/tclWinFCmd.c tcl8.5.8-mingw64-fix/win/tclWinFCmd.c
--- tcl8.5.8/win/tclWinFCmd.c	2006-08-29 02:36:57 +0200
+++ tcl8.5.8-mingw64-fix/win/tclWinFCmd.c	2010-09-05 19:34:51 +0200
@@ -199,7 +199,11 @@ DoRenameFile(
      * arguments is a char block device.
      */
 
-#ifndef HAVE_NO_SEH
+#if defined(_WIN64) && defined(HAVE_NO_SEH)
+	if ((*tclWinProcs->moveFileProc)(nativeSrc, nativeDst) != FALSE) {
+	    retval = TCL_OK;
+	}
+#elif !defined(HAVE_NO_SEH)
     __try {
 	if ((*tclWinProcs->moveFileProc)(nativeSrc, nativeDst) != FALSE) {
 	    retval = TCL_OK;
@@ -587,7 +591,11 @@ DoCopyFile(
      * arguments is a char block device.
      */
 
-#ifndef HAVE_NO_SEH
+#if defined(_WIN64) && defined(HAVE_NO_SEH)
+	if ((*tclWinProcs->copyFileProc)(nativeSrc, nativeDst, 0) != FALSE) {
+	    retval = TCL_OK;
+	}
+#elif !defined(HAVE_NO_SEH)
     __try {
 	if ((*tclWinProcs->copyFileProc)(nativeSrc, nativeDst, 0) != FALSE) {
 	    retval = TCL_OK;
