首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCHAR到LPCWSTR

WCHAR到LPCWSTR
EN

Stack Overflow用户
提问于 2010-07-02 17:24:03
回答 3查看 9.6K关注 0票数 1

当我使用如下所示的CreateFile函数时,...it会给我有效的句柄

代码语言:javascript
复制
HANDLE hDevice = CreateFile (TEXT("\\\\.\\G:"),
                 0,FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
                 NULL, OPEN_EXISTING, 0, NULL);

if( hDevice == INVALID_HANDLE_VALUE )
{
  qDebug()<<"In valid handle";
}
else
{
  qDebug()<<"valid handle";
}

当我使用如下所示时,...it会给我无效的句柄。

代码语言:javascript
复制
WCHAR Drive[4];

qDebug ()<<QString::fromWCharArray ( Drive ); 

The above prints like "G:\"

HANDLE hDevice = CreateFile ( Drive,
                 0,FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
                 NULL, OPEN_EXISTING, 0, NULL);

if( hDevice == INVALID_HANDLE_VALUE )
{
  qDebug()<<"In valid handle";
}
else
{
  qDebug()<<"valid handle";
}

如何将wchar更改为LPCWSTR

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-02 19:54:37

您可以使用toWCharArray函数,也可以尝试如下所示:

代码语言:javascript
复制
handle = CreateFile((LPCWSTR) fileName.constData(), FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);

或者这样:

代码语言:javascript
复制
handle = CreateFile((LPCWSTR) fileName.utf16(), FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
票数 2
EN

Stack Overflow用户

发布于 2010-07-02 17:27:13

问题不在于字符串的转换,而在于字符串的内容。你不能用"G:\“打开一个卷(我猜这就是你想要做的)。它的格式需要与您在第一个示例中使用的格式相同。来自MSDN:

打开卷或软驱时,lpFileName字符串应为以下格式:\.\X:。请勿使用尾随反斜杠,它表示驱动器的根目录。

提示:请务必在接口函数获取失败原因后使用GetLastError()

更新:MSDN Link

票数 4
EN

Stack Overflow用户

发布于 2010-07-02 22:19:45

LPCWSTR是指向常量(C)宽字符(W)字符串的指针(LP)。换句话说,这是一个const WCHAR*

WCHAR Drive[4];是宽字符数组,也可以称为宽字符串。

任何特定类型的数组都可以隐式转换为指向该类型的指针。此外,特定类型的指针可以隐式转换为相同类型的常量指针,特别是在函数调用的情况下。

因此,将Drive传递给该函数会隐式地转换为LPCWSTR

你的问题不在那个转换中。正如humbagumba的答案所解释的那样,您的问题很可能出在字符串的内容上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3164509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档