2013-01-09 82 views
1

我必須在位於包含「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庫,但它也失敗了。

在我的應用程序必須寬字符數組轉換爲字節數組,如果有人知道這個問題,請幫助我秒。

謝謝。

+0

請參閱utf8everywhere.org,還有boost :: nowide這是最簡單的寫法。 –

回答

1

在步驟1中,您使用CP_UTF8進行了轉換。因此在第2步中,您還需要使用CP_UTF8調用MultiByteToWideChar()

我期望LoadLibraryA(cpath, ...)失敗,因爲它假定cpath在CP_ACP中 - 無論您的計算機恰好設置爲哪個系統代碼頁。

+0

謝謝喬納森先生.. – Harish