我必須在位於包含「UNICODE」字符的路徑中的應用程序中加載一個「dll」文件。當我得到wchar_t *中的路徑並將其傳遞給LoadLibrary()時,按預期工作。在將UNICODE字符轉換爲UTF-8多字節字符時感到困惑
但我以另一種方式 1.將寬字符數組轉換爲UTF-8多字節數組。 2.再次將UTF-8多字節數組轉換爲寬字符數組。 3.現在使用轉換後的寬字符數組作爲庫的路徑。 LoadLibrary()失敗,GetLastError()給出216(模塊未找到錯誤)。
我嘗試了上述步驟,認爲輸入到第一將是第二步的輸出,但它不是... :-(
這裏是什麼,我試圖做代碼的細節...
wchar_t* path = L".\\..\\libs\\여성해방운동\\mylib.dll";
//STEP 1:
int creq = WideCharToMultiByte(CP_UTF8,0,path,-1,NULL,0,NULL,NULL);
char* cpath = (char*)malloc(sizeof(char)*creq);
memset(cpath,0,creq);
WideCharToMultiByte(CP_UTF8,0,path,-1,cpath,creq,NULL,NULL);
//STEP:2
int wreq = MultiByteToWideChar(CP_ACP,0,cpath,-1,NULL,0);
wchar_t* wpath = (wchar_t*)malloc(sizeof(wchar_t)*wreq);
memset(wpath,0,sizeof(wchar_t)*wreq);
MultiByteToWideChar(CP_ACP,0,cpath,-1,wpath,wreq);
//STEP:3
if(LoadLibrary(wpath) == NULL)
printf("Loading failed %d \n",GetLastError());
else
printf("Loading is success \n");
我嘗試使用則將cpath(STEP 1的輸出)加載使用「LoadLibraryA」 API庫,但它也失敗了。
在我的應用程序必須寬字符數組轉換爲字節數組,如果有人知道這個問題,請幫助我秒。
謝謝。
請參閱utf8everywhere.org,還有boost :: nowide這是最簡單的寫法。 –