我必须在我的应用程序中加载一个“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的输出)使用“LoadLibraryA”API加载库,但它也失败了。
在我的应用程序中,我必须将宽字符数组转换为多字节数组,并在另一个API中将其反转。如果有人知道的话,请帮助我。
感谢。
答案 0 :(得分:1)
在步骤1中,您使用CP_UTF8进行了转换。因此,在第2步中,您还需要使用CP_UTF8调用MultiByteToWideChar()
。
我希望LoadLibraryA(cpath, ...)
失败,因为它假设cpath位于CP_ACP中 - 无论您的计算机恰好设置为哪个系统代码页。