Смущен в преобразовании символов UNICODE в UTF-8 Multibyte chars

Мне нужно загрузить один файл «dll» в моем приложении, который находится в пути, включая символы «UNICODE». Когда я получаю путь в wchar_t * и передаю его в LoadLibrary (), работает так, как ожидалось.

Но я по-другому 1. Преобразование массива широкого символа в многобайтовый массив UTF-8. 2. Преобразование снова многобайтового массива UTF-8 в массив широких символов. 3. Теперь используйте преобразованный массив широких символов как путь к библиотеке. LoadLibrary() не работает, и GetLastError() дает 216 (ошибка модуля не найдена).

Я попытался сделать шаги, считая, что вход в 1-й будет выводиться на 2-й шаг, но его не ... :-(

Вот данные кода о том, что я пытаюсь сделать ...

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) для загрузки библиотеки с использованием API «LoadLibraryA», но также не удалось.

В моем приложении я должен преобразовать массив широких символов в многобайтовый массив и отменить его обратно в другом API. Поэтому, пожалуйста, помогите мне, если кто-нибудь об этом узнает.

Благодарю.

1
добавлено
Просмотры: 3
nl ja de
см. utf8everywhere.org, а также boost :: nowide, который является самым простым способом записи.
добавлено автор Pavel Radzivilovsky, источник

1 ответы

На шаге 1 вы преобразуетесь с использованием CP_UTF8. Итак, на шаге 2 вам также нужно вызвать MultiByteToWideChar() с CP_UTF8.

Я ожидаю, что LoadLibraryA (cpath, ...) завершится с ошибкой, так как предполагается, что cpath находится в CP_ACP - в зависимости от того, какая системная кодовая страница установлена ​​на вашем компьютере.

1
добавлено
Спасибо, мистер Джонатан.
добавлено автор Harish, источник