【问题标题】:CreateFile(ComX...) error C2664: 'CreateFileW': [duplicate]CreateFile(ComX ...)错误 C2664:'CreateFileW':[重复]
【发布时间】:2019-09-15 06:14:04
【问题描述】:

我必须将信息从 uController 传输到我的笔记本电脑。当我创建文件时,我收到以下错误。如果您看到脚本,我认为更容易进行故障排除。

因为它说 'LPCWSTR' 中的 'char [20]' 不适合,所以我将其更改为:

CreateFile((LPCWSTR)name, GENERIC..

现在我可以编译程序了,但我仍然得到 INVALID_HANDLE_VALUE,并且我无法打开端口。

我的串行例程:

#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "com_bg.hpp"

char name[20]="";       //between the "" inserting COM"X"

...

do
{
    port = CreateFile(name, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

    if (port==INVALID_HANDLE_VALUE)
    {
        k++;
    } 

}
while ((k<MAXCREAT) && (port==INVALID_HANDLE_VALUE));

if (k==MAXCREAT)
    return(ERR_COM);

...

我的主要看起来是这样的:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include "com_bg.hpp"
#include "com._bg.cpp"
#include "tchar.h"

using namespace std;

int _tmain(int argc, _TCHAR *argv[])
{   
     printf("Hello\n");

     getch();

     err = openCom(8, 9600, NONE,1,RTSDTRLOW);

     if (err != OK)
     {
         closeCom();

         printf("Failed to OpenPort\n");

         return 0;
     }
    …

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    类型转换不会改变字符串的底层编码。如果您需要为 char * 字符串中表示的文件或设备名称调用 CreateFile,请显式使用 CreateFileA,或者通过将项目设置更改为不使用 Unicode。

    当然,如果你真的想将char * 字符串传递给CreateFile。更明智的选择是将name 的类型从char 更改为wchar_t(Windows 平台类型为WCHAR)。

    【讨论】:

    • 因为 COM 端口总是在更改我通过控制台手动输入字符的方式。所以我必须使用char。当我更改为“wchar_t”或“WCHAR”时,它会说:C2440: 'Initialisierung': 'const char [1]' cant 'wchar_t [20]'
    • @Sebastian 使用 L 前缀初始化宽字符串:L"Hello World";
    猜你喜欢
    • 2014-05-19
    • 2019-07-18
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2011-12-22
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多