diff --git a/src/winime.cpp b/src/winime.cpp
index 0c52393..85729a3 100644
--- a/src/winime.cpp
+++ b/src/winime.cpp
@@ -56,10 +56,10 @@ mCandilistBufLen(0)
 
     memcpy(&mHead, mpBuf, sizeof(mHead));
     int len = strlen(mHead.mCodeSet);
-    mpIndex1 = (char **) (mpBuf + sizeof(mHead));
-    mpIndex2 = (char **) (mpBuf + sizeof(mHead) + len * sizeof(char *));
-    mpText = mpBuf + sizeof(mHead) + len * sizeof(char *) +
-                len * len * sizeof(char *);
+    mpIndex1 = (int *) (mpBuf + sizeof(mHead));
+    mpIndex2 = (int *) (mpBuf + sizeof(mHead) + len * sizeof(int));
+    mpText = mpBuf + sizeof(mHead) + len * sizeof(int) +
+                len * len * sizeof(int);
 }
 
 WinIme::~WinIme() {
@@ -246,32 +246,33 @@ int WinIme::Search(char c) {
             //                p = *t;
         }
         else
-            p = mpIndex1[Index(c)];
+            p = (char *)mpIndex1[Index(c)];
 
         if (p == (char *) 0xffffffff)
             found = false;
-        p = (unsigned int) p + mpText;
+        p = (unsigned long) p + mpText;
     } //2nd level index
     else if (mNum == 1) {
         int l = strlen(mHead.mCodeSet);
         if (c == mHead.mWildChar) {
             char **t;
             t =
-                find_if(mpIndex2 + Index(mInput[0]) * l,
-                        mpIndex2 + (Index(mInput[0]) + 1) * l,
+                find_if((char **)(mpIndex2 + Index(mInput[0]) * l),
+                        (char **)(mpIndex2 + (Index(mInput[0]) + 1) * l),
                         bind2nd(not_equal_to < char *>(),
                                 (char *) 0xffffffff));
-            if (t == mpIndex2 + (Index(mInput[0]) + 1) * l)
+            if (t == ((char **)mpIndex2) + (Index(mInput[0]) + 1) * l)
                 p = (char *) 0xffffffff;
             else
                 p = *t;
-        } else
-            p = mpIndex2[Index(mInput[0]) * l + Index(c)];
+        } else {
+            int dd =  Index(mInput[0]) * l + Index(c);
+            p = (char *)(mpIndex2[Index(mInput[0]) * l + Index(c)]);
+        }
 
         if (p == (char *) 0xffffffff)
             found = false;
-
-        p = (unsigned int) p + mpText;
+        p = (unsigned long) p + mpText;
     } else if (mNum < mHead.mMaxCodes) {
         p = mpOffset[mNum - 1];
         if (p == (char *) 0xffffffff)
diff --git a/src/winime.h b/src/winime.h
index c2f51ab..816a270 100644
--- a/src/winime.h
+++ b/src/winime.h
@@ -83,8 +83,8 @@ class WinIme {
         char* mpOffset[12];
         int mFd;
         char* mpBuf;
-        char** mpIndex1;
-        char** mpIndex2;
+        int *mpIndex1;
+        int *mpIndex2;
         char* mpText;
         char* mpCur;                  //current search position
         unsigned int mBufSize;
