diff --git a/data/post/execute-assembly/HostingCLRWin32.dll b/data/post/execute-assembly/HostingCLRWin32.dll index ee5f58ae0a..33a722da0a 100644 Binary files a/data/post/execute-assembly/HostingCLRWin32.dll and b/data/post/execute-assembly/HostingCLRWin32.dll differ diff --git a/data/post/execute-assembly/HostingCLRx64.dll b/data/post/execute-assembly/HostingCLRx64.dll index e401ae0ca8..a992c133b4 100644 Binary files a/data/post/execute-assembly/HostingCLRx64.dll and b/data/post/execute-assembly/HostingCLRx64.dll differ diff --git a/external/source/HostingCLR_inject/HostingCLR/HostingCLR.cpp b/external/source/HostingCLR_inject/HostingCLR/HostingCLR.cpp index c9d1341063..f764480ff3 100644 --- a/external/source/HostingCLR_inject/HostingCLR/HostingCLR.cpp +++ b/external/source/HostingCLR_inject/HostingCLR/HostingCLR.cpp @@ -235,40 +235,32 @@ int executeSharp(LPVOID lpPayload) //if we have at least 1 parameter set cEleemnt to 1 psaStaticMethodArgs = SafeArrayCreateVector(VT_VARIANT, 0, 1); - int arg_n = 1; - bool skip = false; - //Parameters number - for (int i = 0; i < raw_args_length; i++) + LPWSTR *szArglist; + int nArgs; + wchar_t *wtext; + wtext = (wchar_t *)malloc((sizeof(wchar_t) * raw_args_length +1)); + + mbstowcs(wtext, (char *)arg_s, strlen((char *)arg_s) + 1); + szArglist = CommandLineToArgvW(wtext, &nArgs); + + vtPsa.parray = SafeArrayCreateVector(VT_BSTR, 0, nArgs); + + for(long i = 0;i< nArgs;i++) { - if (arg_s[i] == '"') - skip = !skip; - - if (arg_s[i] == ' ' && !skip) - arg_n++; - } - - //Set cElement to parametes number - vtPsa.parray = SafeArrayCreateVector(VT_BSTR, 0, arg_n); - - char delim[] = " "; - char *next_token = NULL; - const char *ptr = strtok_s((char*)arg_s, delim, &next_token); - - long i = 0; - //Wallking parameters - while (i < arg_n && ptr != NULL) - { - size_t strlength = strlen(ptr) + 1; - OLECHAR *sOleText1 = new OLECHAR[strlen(ptr) + 1]; - //mbstowcs(sOleText1, ptr, strlen(ptr) + 1); size_t converted; - mbstowcs_s(&converted, sOleText1, strlength, ptr, strlength); + size_t strlength = wcslen(szArglist[i]) + 1; + OLECHAR *sOleText1 = new OLECHAR[strlength]; + char * buffer = (char *)malloc(strlength * sizeof(char)); + + wcstombs(buffer, szArglist[i], strlength); + + mbstowcs_s(&converted, sOleText1, strlength, buffer, strlength); BSTR strParam1 = SysAllocString(sOleText1); SafeArrayPutElement(vtPsa.parray, &i, strParam1); - ptr = strtok_s(NULL, delim, &next_token); - i++; + free(buffer); } + long iEventCdIdx(0); hr = SafeArrayPutElement(psaStaticMethodArgs, &iEventCdIdx, &vtPsa); }