当前位置:首页 » 编程软件 » win32串口编程

win32串口编程

发布时间: 2022-12-06 04:19:09

⑴ 什么是win32编程

Win32编程,指的是用Window提供的API(Application Programming Interface)为Window编写应用程序。
之所以称之为Win32,是因为现在的Window都是32位的(现在已经有64位的吧!但是最普遍是32位).
大家都知道,Window是由GDI.DLL、USER.DLL、KERNEL.DLL三大主要部分组成的。(其实你现在不知道也
不是说的很重要。只是在你学习编程的过程中,你肯定会经常碰到这几个字眼。你肯定会熟悉它的。),那么
学习Win32编程的大部分(特别是应用程序界面部分的编程)是用这三个DLL(Dynatic Linked Library)动态链接库
子程序形式提供的API函数。

就我认为:学习Win32编程得有几个重要条件:一是C语言功底。二是外语功底。三是使用Window的经验。
要学习它不是很难,但也决非易事:

首先:你必须有编程的经验。这里的经验不是指传统的DOS下的字符模式下的编程。大家都知道,Window是图形
操作系统、同时也多任务抢占式(理解它很重要),它是在图形模式下工作。当然你编程得服从于它。但是正
是因为这个,Window的编程模式就和DOS不一样。所有你得有DOS下编程的经验,但是还得转变为WINDOW下的编程
方式。因为两个系统的编程一个是过程化的。即程序从上到下,顺序执行。而另一个是,事件驱动的。要明白
这个,才会体验到Window的博大精深。
我觉得有必要对Window操作系统有所了解。什么是多任务,什么是抢占式。进程和线程的概念。但是刚
开始没有必要因为这些概念让我们失去信心。因为只要你入门了,你就会非常兴奋。
事件驱动:我们知道DOS下程序是顺序执行的。至少它是按着你指定的路径或条件执行的。尽管可能会
在某些条件下跳转,但是基本上是在你(程序的掌握之中),但是在事件驱动中,你只需考虑到可能出现的情
况,并对这些情况做相应的处理。当Window执行你的程序时,它会检测是否发生了你考虑的那些事情是否发生
,如果发生了某件事情(比如你用鼠标单击),它会给你的程序发送相应的消息(所以叫做消息驱动,这里
对就鼠标的消息是WM_MOUSELDOWN等).

⑵ Win32编程原理

所谓的Win32开发,就是在C语言的层面上,直接使用Win32API开发Windows应用程序或者系统程序。虽说现在直接用Win32API开发应用程序的人已经不多了,但是深入理解Windows系统程序设计原理,仍然是成为Windows开发高手的良好途径。所谓的Win32,其实是一个API规范,与UNIX系统编程接口标准POSIX是相对应的。下面是进行直接的WIN32SDK方式编程的基本思路或者说是一个框架:
一个Windows程序分为程序代码和UI(UserInterface用户接口)资源两大部份,两部份最后以RC编译程序整合为一个完整的EXE文件。所谓UI资源是指功能菜单、对话框、程序图标、光标形状等等东西。这些UI资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico.bmp.cur等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。
与控制台程序相同的是,一个Win32程序也必须有一个程序入口点,但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序,就会调用加载器把程序进行加载,然后调用Cstartupcode,后者再调用WinMain(),程序的执行就开始了,WinMain()函数的原型为:
intCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow);
下面程序必须进行必要的初始化工作-产生窗口,第一步是注册一个窗口类:用API函数:RegisterClass(),而这个函数需要一个已经定义好的系统结构:WNDCLASS,这个结构里面定义了窗口的种种属性,需要自己定义,但是许多属性都有默认值。然后调用CreateWindow()函数来产生具有上述定义属性的已注册窗口,但是需要注意的是它只是生成窗口,但并不显示之,所以还需要调用一个函数ShowWindow()将它显示在屏幕上,做完这些初始化工作以后,系统将进入消息循环:
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);}
当消息循环捕捉到消息以后将交由窗口函数WndProc()窗口函数进行相应的处理。这样,一个基于消息事件驱动的WIN32程序的雏形就建立了起来。

⑶ Win32 同步串口编程 ReadFile接收不到数据,该怎么解决

串口同步读写数据,ReadFile会一直阻塞,但是用串口调试助手可以接受到数据。
不过之后再启动程序就正常了,很郁闷,不知道问题出现在哪里,下面把代码贴出来:
以同步方式打开串口:
bool CSerialIO::openSerialPort(char* szSerial){HANDLE hSerial=CreateFileA(szSerial,
GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);if(INVALID_HANDLE_VALUE==hSerial)
return false;
this->hComm=hSerial;
memcpy(cComm,szSerial,strlen(szSerial));
cComm[strlen(szSerial)]='\0';
return true;}读串口:unsigned WINAPI RecieveData(void* pProcessData){ProcessData* pPD=(ProcessData*)pProcessData;while(1){if(pPD->bClosePushThread==true)
ExitThread(0);
byte byteTempBuffer[512]={0};
int iRead=0;
if(pPD->pSerialIO->readSerialPort(byteTempBuffer,511,iRead)){if(iRead<=0){Sleep(1000);continue;}else{pPD->critSecData.lock();
pPD->bVectorRawData.insert(pPD->bVectorRawData.end(),byteTempBuffer,byteTempBuffer+iRead);
pPD->critSecData.unLock();continue;}}Sleep(1000);}return 0;}这是一个线程入口函数,pPD->pSerialIO->readSerialPort(byteTempBuffer,511,iRead)这句代码实际上就是调用ReadFile来读串口数据,在这里设个断点,每次进入这个线程都会阻塞在这个地方,但是如果我用下串口调试助手后,就不会出现这个问题,也就是说 我要读写的串口必须要先被其他的进程读写过,然后才能正常运行。
ps:不要建议我异步读写串口,因为我现在问题还没解决。不知道是不是还需要对串口的参数进行设置。
再说下重点,我的程序可以正常运行的前提是:程序运行之前,用过串口调试助手之类的,也就是说必须要利用别的程序对串口的参数进行设置我的程序才能正常运行。

⑷ Win32是什么什么叫Win32编程

WIN32就是基于32位的windows平台
WIN32编程就是针对32位windows平台的编程开发

现在有了64位的windows系统,但是貌似还没见WIN64

热点内容
安卓咪咕音乐怎么录制视频 发布:2024-05-19 07:56:06 浏览:838
如何搞出超大声的听声辨位安卓版 发布:2024-05-19 07:46:21 浏览:927
linux安全模式 发布:2024-05-19 07:27:25 浏览:176
为什么安卓手机安装不了cpk 发布:2024-05-19 07:22:21 浏览:313
pythonempty 发布:2024-05-19 07:15:16 浏览:930
路由器虚拟服务器搭建 发布:2024-05-19 07:15:15 浏览:999
方舟编译器何时推送 发布:2024-05-19 07:15:10 浏览:599
魔兽世界自动钓鱼脚本 发布:2024-05-19 06:43:07 浏览:496
cbs加密 发布:2024-05-19 06:29:56 浏览:203
ssis存储过程 发布:2024-05-19 06:21:31 浏览:632