【发布时间】:2016-07-04 20:24:20
【问题描述】:
我想参考the test application code for 7zip
在以下行(第 383 行):
SzArEx_GetFileNameUtf16(&db, i, temp); //Line 383, gets directory and filename
uint16* 值temp 获取文件路径的引用表达式(我假设它是一个字符串)。
我有一个 const char,我们将其命名为 filePathToCheck,这基本上是一个文件路径名称。我想要的是一种将 filePathToCheck 值与 temp 值进行比较的方法,以便我可以“选择”我要解密的文件
我最初的实现是获取 temp 的多字节值,但这给出了一个空字符串,可在以下方法中找到:
WideCharToMultiByte(CP_UTF8,NULL,temp,sizeof(temp),testa /* char * */, 0, NULL, NULL);
在运行测试应用程序时(参数已被处理),在 WideCharToMultiByte 函数之后,testa 仍然是一个空字符串。我是不是完全走错了路,我应该以另一种方式处理?
【问题讨论】:
-
作为参考,它是为了被制作成一个dll,所以我不能使用原始应用程序。
-
WideCharToMultiByte 工作正常。你一定做错了什么。显示minimal reproducible example。
-
我认为第 6 个参数是
0使 API 返回所需大小的testa缓冲区。发生这种情况时,testa缓冲区就没有用了。我的建议是再次使用 API,但这次将前一个调用的返回值作为第 6 个参数cbMultiByte传递。我的假设是基于 MSDNIf this parameter is set to 0, the function returns the required buffer size for lpMultiByteStr and makes no use of the output parameter itself.的这一行 -
这样做会产生访问冲突错误,这是有道理的,因为写入的字节数是 4。将参数 6 更改为 4 也会产生相同的错误。
标签: c++