Fixed a few more pointer to integer typecast issues for 64-bit
platforms.

diff --git a/dlls/kernel/locale.c b/dlls/kernel/locale.c
index 0346a61..3a3df32 100644
--- a/dlls/kernel/locale.c
+++ b/dlls/kernel/locale.c
@@ -1820,7 +1820,7 @@
     TRACE("(%p,%08lx)\n", lpfnLocaleEnum, dwFlags);
     EnumResourceLanguagesA( kernel32_handle, (LPSTR)RT_STRING,
                             (LPCSTR)LOCALE_ILANGUAGE, enum_lang_proc_a,
-                            (LONG)lpfnLocaleEnum);
+                            (LONG_PTR)lpfnLocaleEnum);
     return TRUE;
 }
 
@@ -1835,7 +1835,7 @@
     TRACE("(%p,%08lx)\n", lpfnLocaleEnum, dwFlags);
     EnumResourceLanguagesW( kernel32_handle, (LPWSTR)RT_STRING,
                             (LPCWSTR)LOCALE_ILANGUAGE, enum_lang_proc_w,
-                            (LONG)lpfnLocaleEnum);
+                            (LONG_PTR)lpfnLocaleEnum);
     return TRUE;
 }
 
diff --git a/dlls/kernel/module.c b/dlls/kernel/module.c
index 961afeb..a2fe5b5 100644
--- a/dlls/kernel/module.c
+++ b/dlls/kernel/module.c
@@ -941,7 +941,7 @@
         nts = LdrGetProcedureAddress( hModule, &str, 0, (void**)&fp );
     }
     else
-        nts = LdrGetProcedureAddress( hModule, NULL, (DWORD)function, (void**)&fp );
+        nts = LdrGetProcedureAddress( hModule, NULL, LOWORD(function), (void**)&fp );
     if (nts != STATUS_SUCCESS)
     {
         SetLastError( RtlNtStatusToDosError( nts ) );
diff --git a/dlls/kernel/resource16.c b/dlls/kernel/resource16.c
index 20794b3..5afee94 100644
--- a/dlls/kernel/resource16.c
+++ b/dlls/kernel/resource16.c
@@ -202,7 +202,7 @@
             TRACE("NameTable entry: type=%04x id=%04x\n",
                               pTypeInfo->type_id, pNameInfo->id );
             handle = LoadResource16( pModule->self,
-                                     (HRSRC16)((int)pNameInfo - (int)pModule) );
+                                     (HRSRC16)((char *)pNameInfo - (char *)pModule) );
             for(p = (WORD*)LockResource16(handle); p && *p; p = (WORD *)((char*)p+*p))
             {
                 TRACE("  type=%04x '%s' id=%04x '%s'\n",
@@ -226,7 +226,7 @@
                     if (strcasecmp( resId, (char*)(p+3)+strlen((char*)(p+3))+1 )) continue;
 
                 }
-                else if (HIWORD(resId) || (((DWORD)resId & ~0x8000) != p[2]))
+                else if (HIWORD(resId) || ((LOWORD(resId) & ~0x8000) != p[2]))
                   continue;
 
                 /* If we get here, we've found the entry */
@@ -507,7 +507,7 @@
     while (nbItems)
     {
         /* align on DWORD boundary (32-bit only) */
-        dialog32 = (LPVOID)((((int)dialog32) + 3) & ~3);
+        dialog32 = (LPVOID)(((UINT_PTR)dialog32 + 3) & ~3);
 
         if (dialogEx)
         {
@@ -636,7 +636,7 @@
     while (nbItems)
     {
         /* align on DWORD boundary */
-        p = (LPVOID)((((int)p) + 3) & ~3);
+        p = (LPVOID)(((UINT_PTR)p + 3) & ~3);
 
         if (dialogEx)
         {
@@ -736,7 +736,7 @@
             menu32 = (LPWSTR)menu32 + strlenW( (LPWSTR)menu32 ) + 1;
 
             /* align on DWORD boundary (32-bit only) */
-            menu32 = (LPVOID)((((int)menu32) + 3) & ~3);
+            menu32 = (LPVOID)(((UINT_PTR)menu32 + 3) & ~3);
 
             /* If popup, transfer helpid */
             if ( flags & 1)
@@ -787,7 +787,7 @@
             p = (LPWSTR)p + strlenW( (LPWSTR)p ) + 1;
 
             /* align on DWORD boundary (32-bit only) */
-            p = (LPVOID)((((int)p) + 3) & ~3);
+            p = (LPVOID)(((UINT_PTR)p + 3) & ~3);
 
             /* If popup, skip helpid */
             if ( flags & 1)
diff --git a/dlls/kernel/selector.c b/dlls/kernel/selector.c
index 678850a..2bd9180 100644
--- a/dlls/kernel/selector.c
+++ b/dlls/kernel/selector.c
@@ -481,7 +481,7 @@
     const void *base;
     SEGPTR ret = 0;
 
-    if (!HIWORD(ptr)) return (SEGPTR)ptr;
+    if (!HIWORD(ptr)) return (SEGPTR)LOWORD(ptr);
 
     base = (const char *)ptr - ((unsigned int)ptr & 0x7fff);
     HeapLock( GetProcessHeap() );