我必须在我的应用程序中加载一个“dll”文件,该文件位于包含“UNICODE”字符的路径中。当我得到 wchar_t* 中的路径并将其传递给 LoadLibrary() 时,按预期工作。
但我以另一种方式 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 加载库,但它也失败了。
在我的应用程序中,我必须将宽字符数组转换为多字节数组并在另一个 API 中将其反转。因此,如果有人知道这一点,请帮助我。
谢谢。