diff --git a/misc.cpp b/misc.cpp
index 35ac83d..b046f47 100644
--- a/misc.cpp
+++ b/misc.cpp
@@ -143,22 +143,63 @@ std::wstring NumToStr(const long l)
 }
 
 // This function is used to convert char* to std::wstring.
-std::wstring CharToWString(const char* cstr)
+std::wstring CharToWString(const char *cstr)
 {
-	std::string s = std::string(cstr);
-	std::wstring wsTmp(s.begin(), s.end());
-	return wsTmp;
+        if (cstr != NULL)
+        {
+                size_t wc_cnt = mbstowcs(NULL, cstr, 0);
+
+                if (wc_cnt == (size_t) -1) {
+                        return std::wstring();
+                }
+
+                wchar_t *wcs = new wchar_t[wc_cnt + 1];
+                if (wcs == NULL) {
+                        return std::wstring();
+                }
+
+                if (mbstowcs(wcs, cstr, wc_cnt + 1) == (size_t) -1) {
+                        delete [] wcs;
+                        return std::wstring();
+                }
+
+                std::wstring tmp(&wcs[0], &wcs[wc_cnt]);
+                delete [] wcs;
+
+                return tmp;
+        }
+        return std::wstring();
 }
 
 // This function is used to convert std::wstring to char *.
-char * WStringToChar(const std::wstring &wstr)
+char *WStringToChar(const std::wstring &wstr)
 {
-	const wchar_t *wchar_str = wstr.c_str();
-	int wstr_length = wcslen(wchar_str);
-	char *dst = new char[wstr_length + 10];
-	memset(dst, 0x00, (wstr_length + 10));
-	wcstombs(dst, wchar_str, wstr_length);
-	return dst;
+        const wchar_t *wchar_str = wstr.c_str();
+
+        int mb_len = wcstombs(NULL, wchar_str, 0);
+
+        if ((size_t)mb_len == (size_t) -1) {
+                return NULL;
+        }
+
+        char *mbs = new char[mb_len + 1];
+        if (mbs == NULL) {
+                return NULL;
+        }
+
+        memset(mbs, 0, mb_len + 1);
+
+#ifdef __WIN32__
+        size_t charsConverted = 0;
+        wcstombs_s(&charsConverted, mbs, mb_len + 10, wchar_str, mb_len + 1);
+#else
+        if (wcstombs(mbs, wchar_str, mb_len + 1) == (size_t) -1) {
+                delete [] mbs;
+                return NULL;
+        }
+
+#endif
+        return mbs;
 }
 
 // Below function will generate random string of given character.
