diff options
author | ch1p <me@ch1p.com> | 2017-09-25 02:19:01 +0300 |
---|---|---|
committer | ch1p <me@ch1p.com> | 2017-09-25 02:19:01 +0300 |
commit | a586acf8a4cb2cea7b7c9dc72ce79eab085f4092 (patch) | |
tree | 693b5c1ea21a1560c3e4432134272d0cd8432adf | |
parent | c5cc9556e63d49bcb5c8873ba4ecac0b787e3093 (diff) |
unicode fix
-rw-r--r-- | binding.gyp | 16 | ||||
-rw-r--r-- | index.cc | 12 | ||||
-rw-r--r-- | utils.h | 8 |
3 files changed, 26 insertions, 10 deletions
diff --git a/binding.gyp b/binding.gyp index e0c5e4c..c4788fe 100644 --- a/binding.gyp +++ b/binding.gyp @@ -2,7 +2,21 @@ "targets": [ { "target_name": "winutils", - "sources": [ "index.cc" ] + "sources": [ "index.cc" ], + + 'conditions': [ + [ 'OS=="win"', { + 'defines': [ + 'UNICODE=1', + '_UNICODE=1', + '_SQLNCLI_ODBC_', + ], + 'libraries': [ + 'odbc32.lib' + ], + } + ] + ] } ] } @@ -202,17 +202,19 @@ void elevate(const v8::FunctionCallbackInfo<Value>& args) { String::Utf8Value exePathArg(args[0]); std::string exePath(*exePathArg); + std::wstring w_exePath = s2ws(exePath); String::Utf8Value cmdLineArg(args[1]); std::string cmdLine(*cmdLineArg); + std::wstring w_cmdLine = s2ws(cmdLine); SHELLEXECUTEINFO shExInfo = {0}; shExInfo.cbSize = sizeof(shExInfo); shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS; shExInfo.hwnd = 0; - shExInfo.lpVerb = "runas"; - shExInfo.lpFile = exePath.c_str(); - shExInfo.lpParameters = cmdLine.c_str(); + shExInfo.lpVerb = L"runas"; + shExInfo.lpFile = w_exePath.c_str(); + shExInfo.lpParameters = w_cmdLine.c_str(); shExInfo.lpDirectory = 0; shExInfo.nShow = SW_SHOW; shExInfo.hInstApp = 0; @@ -241,12 +243,12 @@ void GetSystem32Path(const v8::FunctionCallbackInfo<Value>& args) { int size = WideCharToMultiByte(CP_UTF8, 0, szPath, -1, NULL, 0, NULL, NULL); if (size > 0) { buffer.resize(size); - WideCharToMultiByte(CP_UTF8, 0, szPath, -1, static_cast<BYTE*>(&buffer[0]), buffer.size(), NULL, NULL); + WideCharToMultiByte(CP_UTF8, 0, szPath, -1, &buffer[0], buffer.size(), NULL, NULL); } else { isolate->ThrowException(Exception::TypeError( String::NewFromUtf8(isolate, "Failed to convert string"))); - return + return; } std::string string(&buffer[0]); #else @@ -71,9 +71,9 @@ std::wstring s2ws(const std::string& s) { int len; int slength = (int)s.length() + 1; - len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); + len = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), slength, 0, 0); wchar_t* buf = new wchar_t[len]; - MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); + MultiByteToWideChar(CP_UTF8, 0, s.c_str(), slength, buf, len); std::wstring r(buf); delete[] buf; return r; @@ -84,9 +84,9 @@ std::string ws2s(const std::wstring& s) { int len; int slength = (int)s.length() + 1; - len = WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, 0, 0, 0, 0); + len = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), slength, 0, 0, 0, 0); char* buf = new char[len]; - WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, buf, len, 0, 0); + WideCharToMultiByte(CP_UTF8, 0, s.c_str(), slength, buf, len, 0, 0); std::string r(buf); delete[] buf; return r; |