1

我必须在我的应用程序中加载一个“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 中将其反转。因此,如果有人知道这一点,请帮助我。

谢谢。

4

1 回答 1

1

在第 1 步中,您使用 CP_UTF8 进行了转换。所以在第 2 步中,还需MultiByteToWideChar()要用 CP_UTF8 调用。

我预计LoadLibraryA(cpath, ...)会失败,因为它假定 cpath 位于 CP_ACP 中——无论您的计算机碰巧设置为哪个系统代码页。

于 2013-01-09T14:54:05.333 回答