當前位置:首頁 » 編程軟體 » 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

熱點內容
怎麼搭建sqlserver伺服器 發布:2023-01-29 16:53:51 瀏覽:579
php替換中文字元 發布:2023-01-29 16:46:24 瀏覽:418
shell腳本中實現cd 發布:2023-01-29 16:39:30 瀏覽:141
php無限分類代碼 發布:2023-01-29 16:39:13 瀏覽:443
安卓在哪裡下載抖音歷史版本 發布:2023-01-29 16:38:12 瀏覽:933
mm漂流瓶和安卓手機有什麼不同 發布:2023-01-29 16:32:04 瀏覽:610
德國訪問 發布:2023-01-29 16:31:57 瀏覽:730
安卓手機如何設置副屏幕 發布:2023-01-29 16:30:19 瀏覽:188
ev3編程軟體學生版 發布:2023-01-29 16:26:24 瀏覽:726
大話2相愛一生伺服器怎麼樣 發布:2023-01-29 16:23:25 瀏覽:359