新手小白的问题,急急急

Y_I_Y 2013-02-28 09:02:19
想写一个简简单单的基于MODBUS的串口通信,从一个485的电表上读取数据而已,不知道哪里出错一直就不能用CREATFILE这个函数
#include <iostream>
#include <Windows.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
//#include <afx.h>
#include <time.h>

int main()
{

HANDLE hCom;
DWORD dwError;

char acBuffa[20] = {0};
char acBuffb[20] = {0};

DWORD dwWriteSize = 0;

bool Y = true;

hCom = CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);

if (hCom == INVALID_HANDLE_VALUE)
{
printf("!!!!");
}
else
{
printf("~~~~\n");
}

strcpy(acBuffa,"01039C5600020A4B");

Y = WriteFile(hCom,acBuffa,16,&dwWriteSize,NULL);

dwError = GetLastError();



Sleep(50);

ReadFile(hCom,acBuffb,4,&dwWriteSize,NULL);


printf("%s",acBuffb);


system("pause");
}

1>------ 已启动生成: 项目: Com, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>f:\modbus\projects\com\com\main.cpp(22) : error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [5]' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>f:\modbus\projects\com\com\main.cpp(35) : warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
1>生成日志保存在“file://f:\Modbus\Projects\Com\Com\Debug\BuildLog.htm”
1>Com - 1 个错误,1 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
...全文
191 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y_I_Y 2013-02-28
  • 打赏
  • 举报
回复
引用 9 楼 ardayoyo 的回复:
引用 8 楼 Y_I_Y 的回复: 因为我一SB没包含头就在那死弄死弄的···· 哈哈,那下次你一定能记得了,恭喜恭喜~
我能再请教你一个问题吗?就是我不懂Createfile还有CreatefileA还有CreatefileW的区别,后面这两个到底是干嘛的?百度的我看的不是很明白···
ardayoyo 2013-02-28
  • 打赏
  • 举报
回复
引用 8 楼 Y_I_Y 的回复:
因为我一SB没包含头就在那死弄死弄的····
哈哈,那下次你一定能记得了,恭喜恭喜~
Y_I_Y 2013-02-28
  • 打赏
  • 举报
回复
引用 7 楼 ardayoyo 的回复:
引用 6 楼 Y_I_Y 的回复: 通啦····实在感谢呀,从来没在WINDOWS下做串口····什么东西都不懂··· 不客气哈 刚才怎么没通呢?
因为我一SB没包含头就在那死弄死弄的····
ardayoyo 2013-02-28
  • 打赏
  • 举报
回复
引用 6 楼 Y_I_Y 的回复:
通啦····实在感谢呀,从来没在WINDOWS下做串口····什么东西都不懂···
不客气哈 刚才怎么没通呢?
Y_I_Y 2013-02-28
  • 打赏
  • 举报
回复
引用 1 楼 ardayoyo 的回复:
错误信息不是已经告诉你了么? CreateFile的第一个参数类型不匹配,你不能直接用字符串"COM3"(const char [5])来当做'LPCWSTR'类型参数,必须进行类型转换 你可以把它改成 _T("COM3")
通啦····实在感谢呀,从来没在WINDOWS下做串口····什么东西都不懂···
Y_I_Y 2013-02-28
  • 打赏
  • 举报
回复
引用 3 楼 French_fries 的回复:
嗯 ,你也可以把“com3”,赋给一个TCHAR数组,然后把地址赋给creatfile第一参数。
具体该怎么弄呢?我弄了还是报错··只是报错不同而已···
Y_I_Y 2013-02-28
  • 打赏
  • 举报
回复
引用 1 楼 ardayoyo 的回复:
错误信息不是已经告诉你了么? CreateFile的第一个参数类型不匹配,你不能直接用字符串"COM3"(const char [5])来当做'LPCWSTR'类型参数,必须进行类型转换 你可以把它改成 _T("COM3")
“ _T("COM3")[/quote]”?加上去报错 我自己改成了这个样子 hCom = CreateFile((LPCWSTR)"COM3",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 虽然是不会报错了,可是还是不能用 我用GETLASTERROR()取出来说是报错2,【2】-系统找不到指定的文件。
Burcy Wen 2013-02-28
  • 打赏
  • 举报
回复
嗯 ,你也可以把“com3”,赋给一个TCHAR数组,然后把地址赋给creatfile第一参数。
cbzjzsb123 2013-02-28
  • 打赏
  • 举报
回复
ardayoyo 2013-02-28
  • 打赏
  • 举报
回复
错误信息不是已经告诉你了么? CreateFile的第一个参数类型不匹配,你不能直接用字符串"COM3"(const char [5])来当做'LPCWSTR'类型参数,必须进行类型转换 你可以把它改成 _T("COM3")

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧