当我使用如下所示的CreateFile函数时,...it会给我有效的句柄
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会给我无效的句柄。
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
谢谢
发布于 2010-07-02 19:54:37
您可以使用toWCharArray函数,也可以尝试如下所示:
handle = CreateFile((LPCWSTR) fileName.constData(), FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);或者这样:
handle = CreateFile((LPCWSTR) fileName.utf16(), FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);发布于 2010-07-02 17:27:13
问题不在于字符串的转换,而在于字符串的内容。你不能用"G:\“打开一个卷(我猜这就是你想要做的)。它的格式需要与您在第一个示例中使用的格式相同。来自MSDN:
打开卷或软驱时,lpFileName字符串应为以下格式:\.\X:。请勿使用尾随反斜杠,它表示驱动器的根目录。
提示:请务必在接口函数获取失败原因后使用GetLastError()。
更新:MSDN Link
发布于 2010-07-02 22:19:45
LPCWSTR是指向常量(C)宽字符(W)字符串的指针(LP)。换句话说,这是一个const WCHAR*
WCHAR Drive[4];是宽字符数组,也可以称为宽字符串。
任何特定类型的数组都可以隐式转换为指向该类型的指针。此外,特定类型的指针可以隐式转换为相同类型的常量指针,特别是在函数调用的情况下。
因此,将Drive传递给该函数会隐式地转换为LPCWSTR。
你的问题不在那个转换中。正如humbagumba的答案所解释的那样,您的问题很可能出在字符串的内容上。
https://stackoverflow.com/questions/3164509
复制相似问题